标签:javascript encryption wcf cryptography c-2
我正在尝试使用AES 128位加密来加密字符串.我有Javascript和C#的代码.主要目标是使用Javascript CryptoJS加密字符串,然后获取生成的密文并使用C#AES AesCryptoServiceProvider解密它.
Javascript代码:
function EncryptText()
{
var text = document.getElementById('textbox').value;
var Key = CryptoJS.enc.Hex.parse("PSVJQRk9QTEpNVU1DWUZCRVFGV1VVT0=");
var IV = CryptoJS.enc.Hex.parse("YWlFLVEZZUFNaWl=");
var encryptedText = CryptoJS.AES.encrypt(text, Key, {iv: IV, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7});
//var decrypted = CryptoJS.AES.decrypt(encrypted, "Secret Passphrase");
var encrypted = document.getElementById('encrypted');
encrypted.value = encryptedText;
}
C#代码:
private String AES_decrypt(string encrypted)
{
byte[] encryptedBytes = Convert.FromBase64String(encrypted);
AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
aes.BlockSize = 128;
aes.KeySize = 256;
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.Pkcs7;
aes.Key = Key;
aes.IV = IV;
ICryptoTransform crypto = aes.CreateDecryptor(aes.Key, aes.IV);
byte[] secret = crypto.TransformFinalBlock(encryptedBytes, 0, encryptedBytes.Length);
crypto.Dispose();
return System.Text.ASCIIEncoding.ASCII.GetString(secret);
}
当使用“hello”作为javascript的纯文本时,我得到这个密文:
uqhe5ya+mISuK4uc1WxxeQ==
将其传递到C#应用程序时,运行Decrypt方法时我收到:
Padding is invalid and cannot be removed.
我在这里难过,并尝试了许多解决方案导致相同的错误.
通过C#加密AES方法加密hello时,我收到:
Y9nb8DrV73+rmmYRUcJiOg==
我提前感谢你的帮助!
解决方法:
尝试使用var Key = CryptoJS.enc.Utf8.parse(“PSVJQRk9QTEpNVU1DWUZCRVFGV1VVT0 =”);而不是HEX.
因为实际上你放入密钥(和IV)并解析的字符串不是十六进制字符串.十六进制是0到F.
标签:javascript,encryption,wcf,cryptography,c-2 来源: https://codeday.me/bug/20190824/1712804.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。