首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用C# -js解密加密的AES

用C# -js解密加密的AES
EN

Stack Overflow用户
提问于 2013-03-18 23:29:41
回答 1查看 1.8K关注 0票数 1

我在C#中使用AES加密一个字符串,如下所示:

代码语言:javascript
复制
public static byte[] KeyFromString(string key, int keyBits)// keyBits is 128, 192, or 256.
{ 
    byte[] keyBinary = Encoding.UTF8.GetBytes(key);
    byte[] b = new byte[keyBits / 8];
    for (int i = 0, j = 0; i < b.Length && j < keyBinary.Length; i++, j++)
    {
        b[i] = keyBinary[j];
    }
    return b;
}

public static string encrypt(string key, string input)
{
    byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
    byte[] keyBytes = KeyFromString(key, 256);
    byte[] encrypted = null;

    using (RijndaelManaged rijAlg = new RijndaelManaged())
    {
        rijAlg.Mode = CipherMode.CBC;
        rijAlg.Padding = PaddingMode.PKCS7;
        rijAlg.KeySize = 256;

        rijAlg.Key = keyBytes;
        rijAlg.IV = new byte[rijAlg.IV.Length]; //use empty IV

        using(var encryptor = rijAlg.CreateEncryptor())
        {
            encrypted = encryptor.TransformFinalBlock(inputBytes, 0, inputBytes.Length); 
        }
    }

    var res = Convert.ToBase64String(encrypted);
    return res;
}

我想用javascript解密密文,我试着用crypto-js:

代码语言:javascript
复制
var iv = [];
for (var i = 0 ; i < 16 ; i++) iv.push(0); //empty IV
var options = { keySize: 256 / 8, mode: CryptoJS.mode.CBC, iv: iv, padding: CryptoJS.pad.Pkcs7 };
var decrypted = CryptoJS.AES.decrypt(cipheredtext, key, options);
var decryptedText = decrypted.toString(CryptoJS.enc.Utf8);

我得到的解密文本是空的。我尝试在编码、密钥大小等方面进行多次更改

如果需要,我可以使用另一个javascript库

EN

回答 1

Stack Overflow用户

发布于 2013-08-03 00:49:29

也许CryptoJS文档没有明确提到这一点,但为了让您选择的加密算法(在您的情况下是AES)使用您提供的确切密钥和IV,必须将它们作为CJS类型的WordArray传递。

获取单词数组的一种方法是使用您选择的编码的解析方法:

代码语言:javascript
复制
var iv = CryptoJS.enc.Hex.parse("HEX ENCODING OF THE KEY");
var key = CryptoJS.enc.Hex.parse("HEX ENCODING OF THE IV");

在此之后,您所做的一切都应该工作得很好。

希望有人觉得这很有用,几天前我花了一段时间才弄明白。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15480590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档