如何在SJCL和C#之间传递加密的值并在两端读取它们?

时间:2019-05-09 13:17:26

标签: c# encryption sjcl

我有一些数据需要在浏览器中进行静态加密,然后按需解密,而我正努力寻找如何从客户端到服务器再返回的“ 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困住。

0 个答案:

没有答案