我正在使用MSDNEncryptStringToBytes_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
返回原始字符串)。
encrypted
我的问题是,如果我在客户端也有相同的密码,如何使用 JavaScript 解密?我尝试使用CryptoJS 对其进行解密,但没有成功。数据在网络服务中被加密,我尝试将其作为字节数组、字符串传递给 JS,尝试使用各种编码对其进行编码,但无论我做什么,我都无法获得原始字符串。我在这里做错了什么,我该如何完成这项工作?它甚至可以这样吗?saltArray 编码甚至自定义密码的使用是否会导致我的问题?
例如,这是我的 JS 尝试之一(使用 base64 编码):
var decoded = CryptoJS.enc.Base64.parse(encrypted);
var decrypted = CryptoJS.AES.decrypt(decoded, "somepassphrase");
(编辑:我打算稍后实施随机盐,一旦我得到了其他所有东西,因为这样更容易跟踪发生了什么)