我使用来自EncryptStringToBytes_Aes的MSDN方法来使用自定义密码来加密一些数据,如下所示:
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解密它,但没有成功。数据在webservice中被加密,我尝试将其作为字节数组string传递给JS,尝试用不同的编码对其进行编码,但无论我做了什么,我都无法获得原始字符串。我在这里做错了什么,我怎样才能做到这一点?像这样可行吗?saltArray编码,甚至是自定义密码的使用,是否会导致我的问题呢?
例如,我的JS尝试之一(使用base64编码)如下:
var decoded = CryptoJS.enc.Base64.parse(encrypted);
var decrypted = CryptoJS.AES.decrypt(decoded, "somepassphrase");(编辑:我打算在以后实现随机盐,一旦我把所有其他东西都唤醒了,因为它更容易跟踪正在发生的事情)
发布于 2012-12-30 22:28:13
尝试使用斯坦福Javascript密码库。链接:http://crypto.stanford.edu/sjcl/
https://stackoverflow.com/questions/14095259
复制相似问题