加密: s1 = "D768F6EF1D8C102A" key1 = "746F6F7470617948" Dim byt1() As Byte, bytK1() As Byte byt1 = HexToBinArray(s1) bytK1 = HexToBinArray(key1) Call a.DES_Encode(byt1, StrConv(bytK1, vbUnicode), bytOut1)另外二进制数组的函数 Private Function BinArrayToHex(Bin() As Byte) As String Dim iLoop As Integer Dim sResult As String sResult = "" '" " For iLoop = LBound(Bin) To UBound(Bin) sResult = sResult + Right("0 " & Hex(Bin(iLoop)), 2) & "" ' " " Next iLoop BinArrayToHex = Trim(sResult) End Function Private Function HexToBinArray(sHex As String) As Variant Dim iLoop As Integer Dim bResult() As Byte ReDim bResult(Len(sHex) \ 2) For iLoop = 0 To Len(sHex) \ 2 bResult(iLoop) = Val("&H " & Mid(sHex, iLoop * 2 + 1, 2)) Next iLoop HexToBinArray = bResult End Function
试试,输入用十六进制字符串:把这一句 DESEntry = StrConv(InData, vbUnicode)换成 For i = 0 To Len(InData) \ 2 - 1 DESEntry(i) = Val("&H" &Mid(InData, i * 2 + 1, 2)) Next iDES_Encode DESEntry, KeyL, DESResult DES_Decode DESResult, KeyR, DESEntry DES_Encode DESEntry, KeyL, DESResultstrCrypto = "" For i = 0 To 7 strCrypto = strCrypto & Right("0" & Hex(DESResult(i)) Next iDebug.Print strCrypto
楼上说的对,如果 Key 输入的也是十六进制字符串:Dim KeyL(7) As Byte Dim KeyR(7) As ByteFor i = 0 To 7 KeyL(i) = Val("&H" &Mid(InData, i * 2 + 1, 2)) KeyR(i) = Val("&H" &Mid(InData, i * 2 + 17, 2)) Next i
要可靠可以使用CAPICOM
s1 = "D768F6EF1D8C102A"
key1 = "746F6F7470617948"
Dim byt1() As Byte, bytK1() As Byte
byt1 = HexToBinArray(s1)
bytK1 = HexToBinArray(key1)
Call a.DES_Encode(byt1, StrConv(bytK1, vbUnicode), bytOut1)另外二进制数组的函数
Private Function BinArrayToHex(Bin() As Byte) As String
Dim iLoop As Integer
Dim sResult As String
sResult = "" '" "
For iLoop = LBound(Bin) To UBound(Bin)
sResult = sResult + Right("0 " & Hex(Bin(iLoop)), 2) & "" ' " "
Next iLoop
BinArrayToHex = Trim(sResult)
End Function
Private Function HexToBinArray(sHex As String) As Variant
Dim iLoop As Integer
Dim bResult() As Byte
ReDim bResult(Len(sHex) \ 2)
For iLoop = 0 To Len(sHex) \ 2
bResult(iLoop) = Val("&H " & Mid(sHex, iLoop * 2 + 1, 2))
Next iLoop
HexToBinArray = bResult
End Function
DESEntry = StrConv(InData, vbUnicode)换成
For i = 0 To Len(InData) \ 2 - 1
DESEntry(i) = Val("&H" &Mid(InData, i * 2 + 1, 2))
Next iDES_Encode DESEntry, KeyL, DESResult
DES_Decode DESResult, KeyR, DESEntry
DES_Encode DESEntry, KeyL, DESResultstrCrypto = ""
For i = 0 To 7
strCrypto = strCrypto & Right("0" & Hex(DESResult(i))
Next iDebug.Print strCrypto
Dim KeyR(7) As ByteFor i = 0 To 7
KeyL(i) = Val("&H" &Mid(InData, i * 2 + 1, 2))
KeyR(i) = Val("&H" &Mid(InData, i * 2 + 17, 2))
Next i
http://sourceforge.net/projects/cryptopp/
你首先在网上的在线 DES 加密网站上测试你的输入、输入,确定加密是 ASCII 文本还是 16 进制码。然后,用单 DES 方式测试的下载的代码是否运算正确。也可以用你的代码测试单 DES 能够正确解密你的代码算出的密文到明文。依我的想象,至少第二和第三轮运算的输入必须是 16 进制码。对于解密,三轮必须都是 16 进制码。因为只要经过一轮运算,输出就必然不能用 ASCII 码覆盖。
楼上那位是高手,叫他帮找一份vb代码给你;