Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中的SlowAES解密错误_Javascript_C#_Encryption_Aes - Fatal编程技术网

Javascript中的SlowAES解密错误

Javascript中的SlowAES解密错误,javascript,c#,encryption,aes,Javascript,C#,Encryption,Aes,我在c中有以下AES加密函数# 公共类AES { 私人密码; 私有字符串密码; 私有整数迭代; 私有字节[]盐; 公共AES(字符串密码) { this.aesciper=新的AESSmanaged(); this.aesciper.Mode=CipherMode.CBC; this.aesciper.Padding=PaddingMode.PKCS7; this.aesciper.IV=HexStringToByteArray(“000102030405060708090A0B0C0D0E0F

我在c中有以下AES加密函数#

公共类AES
{
私人密码;
私有字符串密码;
私有整数迭代;
私有字节[]盐;
公共AES(字符串密码)
{
this.aesciper=新的AESSmanaged();
this.aesciper.Mode=CipherMode.CBC;
this.aesciper.Padding=PaddingMode.PKCS7;
this.aesciper.IV=HexStringToByteArray(“000102030405060708090A0B0C0D0E0F”);
this.aesciper.KeySize=256;
this.aesciper.BlockSize=128;
这个。迭代次数=1000;
this.Salt=System.Text.Encoding.ASCII.GetBytes(“saltsalt”);
this.Password=密码;
}
公共字符串加密(字符串明文)
{
this.aesciper.Key=GenerateKey();
字节[]明文字节=System.Text.Encoding.ASCII.GetBytes(明文);
ICryptoTransform transform=this.aesciper.CreateEncryptor();
返回Convert.ToBase64String(transform.TransformFinalBlock(plainTextBytes,0,plainTextBytes.Length));
}
公共字符串解密(字符串密文)
{
this.aesciper.Key=GenerateKey();
byte[]cipherTextBytes=Convert.FromBase64String(密文);
ICryptoTransform transform=this.aesciper.CreateDecryptor();
返回System.Text.Encoding.ASCII.GetString(transform.TransformFinalBlock(cipherTextBytes,0,cipherTextBytes.Length));
}
私有静态字符串ByteArrayToHexString(字节[]b)
{
System.Text.StringBuilder sb1=新的System.Text.StringBuilder();
int i=0;
对于(i=0;i
通过上面的函数,我从单词“hello”中获得一个base64编码字符串“HlHY8Y2v6idG2DoDMgvR/Q==”

然后,我在Javascript中使用以下解密函数,使用slowAES库和其他类似cryptohelpers.js和pbkdf2.js的东西:

function decrypt3() {
        var mypbkdf2 = new PBKDF2("password", "saltsalt", 1000, 32);
        var newKey;
        var result_callback = function (key) {
            newKey = key;
            var bytes = cryptoHelpers.base64.decode('HlHY8Y2v6idG2DoDMgvR/Q==');

            var result = slowAES.decrypt(bytes, 6, slowAES.modeOfOperation.CBC, hexStringToByteArray(key), 32, hexStringToByteArray("000102030405060708090A0B0C0D0E0F"));
            alert(byteArrayToAscii(result));


        };
        mypbkdf2.deriveKey(function () {}, result_callback);
    }



 function asciiToByteArray(s)
{
    var r= Array(s.length);
    for (var i = 0; i < s.length; i++)
    {
        r[i]= s.charCodeAt(i);
    }
    return r;
}

function byteArrayToAscii(a) {
    var r = "";
    for (var i = 0; i < a.length; i++) {
        r += String.fromCharCode(a[i]);
    }
    return r;
}

function hexStringToByteArray(s) {
    try { hexcase } catch (e) { hexcase = 0; }
    var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
    var r = Array(s.length / 2);
    for (var i = 0; i < s.length; i += 2) {
        r[i / 2] = parseInt(s.substr(i, 2), 16);
    }
    return r;
}

function byteArrayToHexString(a) {
    try { hexcase } catch (e) { hexcase = 0; }
    var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
    var r = "";
    for (var i = 0; i < a.length; i++) {
        var b = hex_tab.charAt((a[i] >> 4) & 0x0F) +
            hex_tab.charAt(a[i] & 0x0F);
        r += b;
    }
    return r;
}
函数decrypt3(){
var mypbkdf2=新的PBKDF2(“密码”,“盐”,1000,32);
var newKey;
var result_callback=函数(键){
newKey=key;
var bytes=cryptoHelpers.base64.decode('HlHY8Y2v6idG2DoDMgvR/Q=');
var result=slowAES.decrypt(字节,6,slowAES.modeOfOperation.CBC,hexStringToByteArray(密钥),32,hexStringToByteArray(“000102030405060708090A0B0C0D0E0F”);
警报(byteArrayToAscii(结果));
};
deriveKey(函数(){},结果_回调);
}
功能asciiToByteArray(s)
{
var r=数组(s.长度);
对于(变量i=0;i>4)和0x0F)+
十六进制制表符(a[i]&0x0F);
r+=b;
}
返回r;
}

我无法解密字符串,“result”总是一个空数组,我无法理解它。谢谢你的帮助

可能是Nope的重复,问题是他将IV作为字符串而不是字节数组传递。OP没有犯同样的错误。
function decrypt3() {
        var mypbkdf2 = new PBKDF2("password", "saltsalt", 1000, 32);
        var newKey;
        var result_callback = function (key) {
            newKey = key;
            var bytes = cryptoHelpers.base64.decode('HlHY8Y2v6idG2DoDMgvR/Q==');

            var result = slowAES.decrypt(bytes, 6, slowAES.modeOfOperation.CBC, hexStringToByteArray(key), 32, hexStringToByteArray("000102030405060708090A0B0C0D0E0F"));
            alert(byteArrayToAscii(result));


        };
        mypbkdf2.deriveKey(function () {}, result_callback);
    }



 function asciiToByteArray(s)
{
    var r= Array(s.length);
    for (var i = 0; i < s.length; i++)
    {
        r[i]= s.charCodeAt(i);
    }
    return r;
}

function byteArrayToAscii(a) {
    var r = "";
    for (var i = 0; i < a.length; i++) {
        r += String.fromCharCode(a[i]);
    }
    return r;
}

function hexStringToByteArray(s) {
    try { hexcase } catch (e) { hexcase = 0; }
    var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
    var r = Array(s.length / 2);
    for (var i = 0; i < s.length; i += 2) {
        r[i / 2] = parseInt(s.substr(i, 2), 16);
    }
    return r;
}

function byteArrayToHexString(a) {
    try { hexcase } catch (e) { hexcase = 0; }
    var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
    var r = "";
    for (var i = 0; i < a.length; i++) {
        var b = hex_tab.charAt((a[i] >> 4) & 0x0F) +
            hex_tab.charAt(a[i] & 0x0F);
        r += b;
    }
    return r;
}