无法使用加密解密 encryptedValue

Not able to decrypt the encryptedValue using crypto

我正在尝试解密来自 VB 的一个值(用 des 加密)。 当我尝试在 Javascript 中使用 crypto 解密 encryptedValue 时,输出为我提供了一个空值。 我附上了如何在 VB.

中完成加密

我如何尝试解密 JAVASCRIPT

var CryptoJS       = require("crypto-js");
var key            = "peekaboo";
var encryptedValue = "50AznWWn4fJI19T392wIv/ZysP/Ke3mB";
encryptedValue     = CryptoJS.enc.Base64.parse(encryptedValue);

var data           = CryptoJS.DES.decrypt(encryptedValue, key, { iv: "cbauthiv" });

const email  = data.toString(CryptoJS.enc.Utf8);

console.log(email, "ORIGINAL TEXT");

它在 VB

中的加密方式
Imports System.Security.Cryptography
Imports System.Text
Imports System.IO

Module Module1

    Private Const ENCRYPTIONKEY As String = "peekaboo"

    Sub Main()

       
        Dim s As String = Encrypt("ditzymoose@outlook.com")

        Dim r As String = Decrypt(s)
        Console.ReadLine()


    End Sub


    Private Function Encrypt(stringToEncrypt As String) As String
        Dim rng As New RNGCryptoServiceProvider
        Dim byteArray() As Byte = New Byte(8) {}
        Dim iv_value As String = "cbauthiv"
        Dim key() As Byte = {}
        Dim IV() As Byte = System.Text.Encoding.UTF8.GetBytes(Left(iv_value, 8))

        key = System.Text.Encoding.UTF8.GetBytes(Left(ENCRYPTIONKEY, 8))
        Dim des As New DESCryptoServiceProvider
        rng.GetBytes(byteArray)
        Dim Salt As String = BitConverter.ToString(byteArray)
        Dim SaltedInput As String = Salt & "~" & stringToEncrypt
        Dim inputByteArray() As Byte = Encoding.UTF8.GetBytes(stringToEncrypt)
        Dim ms As New MemoryStream
        Dim cs As New CryptoStream(ms, des.CreateEncryptor(key, IV), CryptoStreamMode.Write)
        cs.Write(inputByteArray, 0, inputByteArray.Length)
        cs.FlushFinalBlock()
        Return Convert.ToBase64String(ms.ToArray())

    End Function
End Module

密钥和 IV 必须作为 WordArray 传递。对于转换,必须使用 Utf8-Encoder,here.

此外,密文必须作为 CipherParams 对象或 Base64 编码(然后隐式转换为 CipherParams 对象)传递,here.

通过这些更改,VB 代码的密文可以使用 CryptoJS 代码成功解密:

var key            = CryptoJS.enc.Utf8.parse("peekaboo");
var iv             = CryptoJS.enc.Utf8.parse("cbauthiv");
var encryptedValue = "50AznWWn4fJI19T392wIv/ZysP/Ke3mB";

var data           = CryptoJS.DES.decrypt(encryptedValue, key, {iv: iv});
var email          = data.toString(CryptoJS.enc.Utf8);

console.log(email, "ORIGINAL TEXT");
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>

请注意 DES 是不安全的 (here),并且在将近 20 年前被 AES 取代。同样不安全的是静态 IV。相反,应该为每次加密生成一个随机 IV。
此外,不应将密码用作密钥。如果要使用密码,则应使用可靠的密钥派生函数(例如 PBKDF2)从密码派生密钥。