如何使用JavaScript解密AesCryptoServiceProvider

How to decrypt AesCryptoServiceProvider using JavaScript?

本文关键字:AesCryptoServiceProvider 解密 JavaScript 何使用      更新时间:2023-09-26

我使用来自MSDN的EncryptStringToBytes_Aes方法使用自定义密码短语加密一些数据,如下所示:

string original = "some data to encrypt";
byte[] encrypted;
using (AesManaged aes = new AesManaged())
{
    // Prepare new Key and IV.
    string passphrase = "somepassphrase";
    byte[] saltArray = Encoding.ASCII.GetBytes("somesalt"); 
    Rfc2898DeriveBytes rfcKey = new Rfc2898DeriveBytes(passphrase, saltArray);
    aes.Key = rfcKey.GetBytes(aes.KeySize / 8);
    aes.IV = rfcKey.GetBytes(aes.BlockSize / 8);
    // Encrypt the string to an array of bytes. 
    encrypted = EncryptStringToBytes_Aes(original, aes.Key, aes.IV);
    // Decrypt the bytes to a string. 
    string roundtrip = DecryptStringFromBytes_Aes(encrypted, aes.Key, aes.IV);
    return Convert.ToBase64String(encrypted);
}

,它工作(DecryptStringFromBytes_Aes返回原始字符串)。

我的问题是如何使用JavaScript解密encrypted,如果我在客户端也有相同的密码短语?我尝试使用CryptoJS来解密它,但没有成功。数据在webservice中加密,我尝试将其作为字节数组,字符串传递给JS,尝试用各种编码对其进行编码,但无论我做什么,我都无法获得原始字符串。我在这里做错了什么,我该怎么做?这样真的可行吗?saltArray编码或甚至自定义密码短语的使用可能是我的问题的原因吗?

下面是我的一个JS尝试(使用base64编码):

var decoded = CryptoJS.enc.Base64.parse(encrypted);
var decrypted = CryptoJS.AES.decrypt(decoded, "somepassphrase");

(编辑:我的意思是实现随机盐稍后,一旦我得到了其他一切工作,因为它更容易跟踪正在发生的事情)

尝试使用斯坦福Javascript加密库。链接:http://crypto.stanford.edu/sjcl/

相关文章:
  • 没有找到相关文章