copymemory VB6 / VBA到VB.net算术运算导致溢出

时间:2017-10-05 13:56:47

标签: vb.net encryption vb6 visual-studio-2017 aes

嘿所有我想弄清楚如何让以下工作或替换以便工作:

模块1:

Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click
    Dim sTemp, sPassword As String

    sTemp = "this is a test"
    Debug.Print("       To encrypt: " & sTemp)

    sPassword = "blk@vjdii:5@fAB5"
    Debug.Print(StrReverse(sPassword))

    sPassword = Str2Hex(strEncrypt(sPassword, StrReverse(sPassword)))
    Debug.Print("       Secret key: " & sPassword)

    sTemp = Str2Hex(strEncrypt(sTemp, sPassword))
    Debug.Print("          Encrypt: " & sTemp)

    sTemp = Base64EncodeString(sTemp)
    Debug.Print("Encrypt w/ Base64: " & sTemp)

    sTemp = Base64DecodeString(sTemp)
    Debug.Print("Decrypt w/ Base64: " & sTemp)

    sTemp = Hex2Str(sTemp)
    Debug.Print("          Decrypt: " & strDecrypt(sTemp, sPassword))
End Sub

 This code works just fine when using it within the VBA excel code. This is the VB6 output:

用户窗体:

filter(line)
  

要加密:这是一个测试

     

密钥:F050C1C2B61E8DCC349DC498D9993F8D11330F12D9E0071B4B83D172FEBE5AED

     

加密:F899ABA853D21B20F889CFD18BB42C472187B4E1CF613139370313DFD8A492DE

     

使用Base64进行加密:

     

Rjg5OUFCQTg1M0QyMUIyMEY4ODlDRkQxOEJCNDJDNDcyMTg3QjRFMUNGNjEzMTM5MzcwMzEzREZEOEE   0OTJERQ ==

     

与Base64解密:F899ABA853D21B20F889CFD18BB42C472187B4E1CF613139370313DFD8A492DE

     

解密:这是一个测试

然而,当将其转换为.net时,我得到错误:

  

算术运算导致溢出。

CopyMemory(VarPtr(bytIn(0)),VarPtr(lLength),4)

如何重新编写它以使其工作,以便VB.net和VB6可以共享代码库,以便来回加密/解密字符串消息?

1 个答案:

答案 0 :(得分:2)

在VB.NET中使用Array.Copy方法。 VB.NET具有与VB6完全不同的内存模型。您不能在VB.NET中应用VB6 DLL中的VB6函数! .NET有自己的加密系统。请参阅:System.Security.Cryptography Namespace

Array.Copy(bytTemp, 0, bytIn, lCount, 32)

VB.NET不仅仅是一个VB7。 VB.NET是一种全新的语言,具有全新的类型系统,新的库,新的DLL和EXE结构,新的运行时基础结构,新的......(几乎所有内容都是新的)

正如Hans Passant已经暗示的那样:拥有VB6和VB.NET的通用代码库几乎是不可能的