将Simple3DesVB.net加密-解密代码覆盖到python

问题描述

我有一个普通的JSON文本,该文本已在Visual Basic中使用Triple-DES(下面提供的代码)进行了加密,现在我正尝试使用python语言对其进行解密。当我测试它时,我得到了错误输出。 我认为有任何填充问题,因为我没有得到这一行:

ReDim Preserve hash(length - 1)

VB代码

Public notinheritable Class Simple3Des
    Private TripleDes As New TripleDESCryptoServiceProvider

    Private Function TruncateHash(ByVal key As String,ByVal length As Integer) As Byte()
        Dim sha1 As New SHA1CryptoServiceProvider

        ' Hash the key.
        Dim keyBytes() As Byte = System.Text.Encoding.Unicode.GetBytes(key)
        Dim hash() As Byte = sha1.ComputeHash(keyBytes)

        ' Truncate or pad the hash.
        ReDim Preserve hash(length - 1)

        Return hash
    End Function

    Sub New(ByVal key As String)
        ' Initialize the crypto provider.
        TripleDes.Key = TruncateHash(key,TripleDes.KeySize \ 8)
        TripleDes.IV = TruncateHash("",TripleDes.BlockSize \ 8)
    End Sub

    Public Function EncryptData(ByVal plaintext As String) As String
        ' Convert the plaintext string to a byte array.
        Dim plaintextBytes() As Byte = System.Text.Encoding.Unicode.GetBytes(plaintext)

        ' Create the stream.
        Dim ms As New System.IO.MemoryStream

        ' Create the encoder to write to the stream.
        Dim encStream As New CryptoStream(ms,TripleDes.CreateEncryptor(),System.Security.Cryptography.CryptoStreamMode.Write)

        ' Use the crypto stream to write the byte array to the stream.
        encStream.Write(plaintextBytes,plaintextBytes.Length)
        encStream.FlushFinalBlock()

        ' Convert the encrypted stream to a printable string.
        Return Convert.ToBase64String(ms.ToArray)
    End Function

    Public Function DecryptData(ByVal encryptedtext As String) As String
        ' Convert the encrypted text string to a byte array.
        Dim encryptedBytes() As Byte = Convert.FromBase64String(encryptedtext)

        ' Create the stream.
        Dim ms As New System.IO.MemoryStream

        ' Create the decoder to write to the stream.
        Dim decStream As New CryptoStream(ms,TripleDes.CreateDecryptor(),System.Security.Cryptography.CryptoStreamMode.Write)

 
        ' Use the crypto stream to write the byte array to the stream.
        decStream.Write(encryptedBytes,encryptedBytes.Length)
        decStream.FlushFinalBlock()

        ' Convert the plaintext stream to a string.
        Return System.Text.Encoding.Unicode.GetString(ms.ToArray)
    End Function
End Class

这是我使用不同填充和组合的方法

from pyDes import *
import hashlib
import base64

key = b'Hi4Q=rLJnyqPj$G_cTqDcwgWo'
sha1_hash = hashlib.sha1(key).digest()

key_ = sha1_hash[:len(key)//8]
# key_ = sha1_hash[:-4]
# key_ = sha1_hash

base64Encrypted = r'''...'''
base64Decrypted = base64.b64decode(base64Encrypted)
print ("output: ",k.decrypt(base64Decrypted))

我做错什么了吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)