我有一些数据需要在浏览器中进行静态加密,然后按需解密,而我正努力寻找如何从客户端到服务器再返回的“ hello world”。我知道C#不支持CCM,但是SJCL还有其他看似有希望的方法,但我似乎做不到。例如,
var password = "password";
var text = "my secret text";
var parameters = { "iter": 1000 };
var rp = {};
var cipherTextJson = {};
sjcl.misc.cachedPbkdf2(password, parameters);
cipherTextJson = sjcl.encrypt(password, text, parameters, rp);
console.log(cipherTextJson);
给我一个JSON字符串{“ iv”:“ PP76jcKAOQHYSin9BHwvww ==”,“ v”:1,“ iter”:1000,“ ks”:128,“ ts”:64,“ mode”:“ ccm “,” adata“:”“,”密码“:” aes“,”盐“:” E / Uz19f8z + 8 =“,” ct“:” ZAM7J3G4b00599Clavj1hQyNepM8bw ==“}
然后,当我尝试在服务器端使用相同的密钥/盐(例如
)对其解密时, public static string Decrypt<T>(string Value, string Key, string Salt) where T : SymmetricAlgorithm, new()
{
DeriveBytes deriveBytes = new Rfc2898DeriveBytes(Key, Encoding.Unicode.GetBytes(Salt));
SymmetricAlgorithm algorithm = new T();
byte[] keyBytes = deriveBytes.GetBytes(algorithm.KeySize >> 3);
byte[] ivBytes = deriveBytes.GetBytes(algorithm.BlockSize >> 3);
ICryptoTransform transform = algorithm.CreateDecryptor(keyBytes, ivBytes);
using (MemoryStream buffer = new MemoryStream(Convert.FromBase64String(Value)))
{
using (CryptoStream stream = new CryptoStream(buffer, transform, CryptoStreamMode.Read))
{
using (StreamReader reader = new StreamReader(stream, Encoding.Unicode))
{
return reader.ReadToEnd();
}
//stream.Write()
}
}
}
我会遇到各种长度错误等(不足为奇,因为这没有使用正确的算法,只是我尝试过的其中一种)。
有人在两者之间只有一个简单的“ hello world”示例吗?任何加密方法都行得通,我不会被AES困住。