Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.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 TripleDESCryptoServiceProvider上的C#代码给出了与cryptojs不同的值_Javascript_C#_Cryptojs - Fatal编程技术网

Javascript TripleDESCryptoServiceProvider上的C#代码给出了与cryptojs不同的值

Javascript TripleDESCryptoServiceProvider上的C#代码给出了与cryptojs不同的值,javascript,c#,cryptojs,Javascript,C#,Cryptojs,我正在尝试使用cryptojs将c代码转换为javascript,并在c代码中使用TripleDESCryptoServiceProvider。除了加密部分之外,我可以在javascript代码中完全获得C#的值。我得到了不同的加密结果。 请参阅我在c#和javascript上的代码 C# 公共静态字符串EncryptTxt(字符串密钥、字符串消息、密码模式、Int16密钥偏移) { SHA512CryptoServiceProvider sha=新的SHA512CryptoServicePro

我正在尝试使用cryptojs将c代码转换为javascript,并在c代码中使用TripleDESCryptoServiceProvider。除了加密部分之外,我可以在javascript代码中完全获得C#的值。我得到了不同的加密结果。 请参阅我在c#和javascript上的代码

C# 公共静态字符串EncryptTxt(字符串密钥、字符串消息、密码模式、Int16密钥偏移) { SHA512CryptoServiceProvider sha=新的SHA512CryptoServiceProvider(); 字节[]新键=新字节[23]

using (var tdes = new TripleDESCryptoServiceProvider())
{
    byte[] Results;
    System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
    MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
    byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(key));
    TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();

    byte[] keybyte = sha.ComputeHash(Encoding.UTF8.GetBytes(key));
    byte[] newKeyx = new byte[24];

    Array.Copy(keybyte, KeyOffSet, newKeyx, 0, newKeyx.Length);

    TDESAlgorithm.Key = newKeyx;
    TDESAlgorithm.Mode = mode;
    TDESAlgorithm.Padding = PaddingMode.PKCS7;
    byte[] DataToEncrypt = UTF8.GetBytes(msg);
    try
    {
        ICryptoTransform Encryptor = TDESAlgorithm.CreateEncryptor();
        Results = Encryptor.TransformFinalBlock(DataToEncrypt, 0, DataToEncrypt.Length);
    }
finally
{
    TDESAlgorithm.Clear();
    HashProvider.Clear();
}
return Convert.ToBase64String(Results);
}

javascript

encryptText = () => {
    debugger;
    const msg = 'Autosweep2Go1:juan:201910181809:12345678';
    let key = crypto.enc.Utf8.parse('xxx');
    key = crypto.MD5(key);
    key.words.push(key.words[0], key.words[1]);
    const iv = crypto.enc.Utf8.parse('xxx');

    // MD5CryptoServiceProvider
    const hashProvider = crypto.MD5(iv);
    const TDESKey = this.wordArrayToByteArray(hashProvider, 8);

    const keybyte = this.wordArrayToByteArray(crypto.SHA512(iv), 16);
    const newKeyx = new Uint8Array(24);

    const newkeybyte = keybyte.slice(10, 34);
    // Object.assign(newKeyx, newkeybyte);

    const TDESAlgorithmKey = newkeybyte;
    const DataToEncrypt = this.wordArrayToByteArray(crypto.enc.Utf8.parse(msg), 40);
    const dteLength = DataToEncrypt.length;
    const encrypted = crypto.TripleDES.encrypt(crypto.enc.Utf8.parse(msg),
    crypto.enc.Utf8.parse(newkeybyte),
    {
      mode: crypto.mode.ECB,
      padding: crypto.pad.Pkcs7,
    });
    const result = this.wordArrayToByteArray(encrypted.ciphertext, dteLength);
    const x = this.wordArrayToByteArray(crypto.enc.Utf8.parse(encrypted.toString()), dteLength);

    console.log(encrypted);
    return encrypted;
     }
C#结果

Javasctipt结果


你能告诉我怎么做吗。我真的很感激

在您的C#代码中不存在IV,尽管这看起来有点奇怪,因为您定义了多个变量(键和IV),但只使用其中一个。我只是为了调试原因而交换它们。我一上班就要清理代码。IV和钥匙和我理解的一样。对吗?“IV和密钥与我理解的方式相同。”-不,IV(有点)与加密的关系就像盐与散列的关系一样。有关更多信息,请参阅关于IV。