加密后的值为:"?槏t罀gp??Ok猷噂鶃"
我把它保存到了文本文件中, 如何解密呢??
s = StrConv("?槏t罀gp??Ok猷噂鶃", vbFromUnicode) '这里s="",为什么呢???
s = StrConv(rlt1, vbUnicode)
d.EncryptDes_ArrToArr rlt1, data, 2
Text1.Text = StrConv(data, vbUnicode)
我把它保存到了文本文件中, 如何解密呢??
s = StrConv("?槏t罀gp??Ok猷噂鶃", vbFromUnicode) '这里s="",为什么呢???
s = StrConv(rlt1, vbUnicode)
d.EncryptDes_ArrToArr rlt1, data, 2
Text1.Text = StrConv(data, vbUnicode)
也就是要用 Byte类型的数组 来保存及处理。
如果你把它当成“文本字符”处理,
因很多内容没有对应的字符,系统在转换过程中,基本上都是用西文的问号来代替。
这样一“转换”,内容都变了,就算是可逆加密算法的,也根本无法再解密还原。那些把可显示字符加密后还是可显示字符的,都是一些非常简单、原始的算法。
从密码学的角度来说,完全是不堪一击的。
Private mDES As clsDES
Public Function Encode(ByVal vString As String, ByVal vCode As String) As String
Dim vbytePwd() As Byte
On Error GoTo Errorhandle
If vString = "" Then
Encode = ""
Exit Function
End IfIf mDES Is Nothing Then Set mDES = New clsDESLet vbytePwd = StrConv(vString, vbUnicode)
Call mDES.EncryptByte(vbytePwd, vCode)Encode = pByteToHex(vbytePwd)Exit Function
Errorhandle:
Encode = ""
End FunctionPublic Function Decode(ByVal vString As String, ByVal vCode As String) As String
Dim vbytePwd() As Byte
On Error GoTo Errorhandle
If LenB(vString) = 0 Then Exit FunctionIf mDES Is Nothing Then Set mDES = New clsDES
Let vbytePwd = pHexToByte(vString)Call mDES.DecryptByte(vbytePwd, vCode)Decode = StrConv(vbytePwd, vbFromUnicode)
Exit Function
Errorhandle:
Decode = ""
End FunctionPrivate Function pByteToHex(ByteArr() As Byte) As String
On Error Resume Next
Dim Temps As String
Dim i As Long
For i = 0 To UBound(ByteArr)
Temps = Hex(ByteArr(i))
Temps = Right("00" & Temps, 2)
pByteToHex = pByteToHex & Temps
Next
End FunctionPrivate Function pHexToByte(ByVal HexStr As String) As Byte()
Dim i As Long
Dim vLen As Long
Dim vArr() As Byte
If LenB(HexStr) = 0 Then Exit Function
vLen = Len(HexStr) \ 2
ReDim vArr(vLen - 1)
For i = 0 To vLen - 1
Let vArr(i) = Val("&H" & Mid$(HexStr, i * 2 + 1, 2))
Next
Let pHexToByte = vArr
End Function