如何对数据库中字段的中文内容进行加密与解密? 急用,在线等!!!
我曾找到的UserCode和UserDeCode,只能针对英文及数字,对有的中文可以,但有的不行(报告溢出错误),有无通用的针对中文的加解密函数,急盼!!
Function UserCode(password As String) As String
'用户口令加密
Dim il_bit, il_x, il_y, il_z, il_len, i As Long
Dim is_out As String
il_len = LenB(password)
il_x = 0
il_y = 0
is_out = ""
For i = 1 To il_len
il_bit = AscB(MidB(password, i, 1)) 'b系列支持中文
il_y = (il_bit * 13 Mod 256) + il_x - 5
is_out = is_out & ChrB(Fix(il_y)) '取整 int和fix区别: fix修正负数
il_x = il_bit * 13 / 256
Next
is_out = is_out & ChrB(Fix(il_x))
password = is_out
il_len = LenB(password)
il_x = 0
il_y = 0
is_out = ""
For i = 1 To il_len
il_bit = AscB(MidB(password, i, 1))
'取前4位值
il_y = il_bit / 16 + 64
is_out = is_out & ChrB(Fix(il_y))
'取后4位值
il_y = (il_bit Mod 16) + 64
is_out = is_out & ChrB(Fix(il_y))
Next
UserCode = is_out
End Function
Function UserDeCode(password As String) As String
'口令解密
Dim is_out As String
Dim il_x, il_y, il_len, i, il_bit As Long
il_len = LenB(password)
il_x = 0
il_y = 0
is_out = ""
For i = 1 To il_len Step 2
il_bit = AscB(MidB(password, i, 1))
'取前4位值
il_y = (il_bit - 64) * 16
'取后4位值
'dd = AscW(Mid(password, i + 1, 1)) - 64
il_y = il_y + AscB(MidB(password, i + 1, 1)) - 64
is_out = is_out & ChrB(il_y)
Next
il_x = 0
il_y = 0
password = is_out
is_out = ""
il_len = LenB(password)
il_x = AscB(MidB(password, il_len, 1))
For i = (il_len - 1) To 1 Step -1
il_y = il_x * 256 + AscB(MidB(password, i, 1))
il_x = il_y Mod 13
is_out = ChrB(Fix(il_y / 13)) & is_out
Next
UserDeCode = is_out
End Function
问题点数:0、回复次数:4Top
1 楼EisenHammer(奥古斯都)回复于 2004-09-02 09:16:28 得分 0
可以不用别人的代码,自己编写加密/解密函数。
比如加密的时候每个字符统统减去一个常数,解密的时候再加上去。
比如加密的时候前面的字符的Unicode值减去后一个字符的Unicode值,存在前一个字符的位置,最后一个字符的Unicode值减去第一个字符的Unicode值存在最后一个字符的位置上;解密的时候反过来。Top
2 楼3days(三天)回复于 2004-09-02 09:20:48 得分 0
本人在操作数据库时,考虑到该数据库还有可能被其他软件打开,所以想能否有另外一种方式把数据库中数据进行加密呢,也
就是说,即使别人利用其他的软件打开了该数据库,看到的也是一片乱码,根本不知道数据库进而是什么内容。出于这种情况,本人利用VB中自带
RND()函数的功能编写了如下加密解密方法。
当RND()的参数(我们称它为种子)为负值时,同一种子产生同一个随机序列,同时VB还具有强大的二进制技术功能。
这样我们可以按以下方法实现字符串内容的加密解密。
源程序如下:
Public Function StringEnDeCodecn(strSource As String, MA) As String
'该函数只对中西文起到加密作用
'参数为:源文件,密码
On Error GoTo ErrEnDeCode
Dim X As Single
Dim CHARNUM As Long, RANDOMINTEGER As Integer
Dim SINGLECHAR As String * 1
Dim strTmp As String
If MA < 0 Then
MA = MA * (-1)
End If
X = Rnd(-MA)
For i = 1 To Len(strSource) Step 1 '取单字节内容
SINGLECHAR = Mid(strSource, i, 1)
CHARNUM = Asc(SINGLECHAR)
g: RANDOMINTEGER = Int(127 * Rnd)
If RANDOMINTEGER < 30 Or RANDOMINTEGER > 100 Then GoTo g
CHARNUM = CHARNUM Xor RANDOMINTEGER
strTmp = strTmp & Chr(CHARNUM)
Next i
StringEnDeCodecn = strTmp
Exit Function
ErrEnDeCode:
StringEnDeCodecn = ""
MsgBox Err.Number & "\" & Err.Description
End Function
使用方法:
tmp=StringEnDeCodecn("中华人民共和国",75)
如果要解密的话,只须键入以下语句:
tmp1=StringEnDeCodecn(tmp,75)Top
3 楼ajianchen2002(【改变自己·改变命运】)回复于 2004-09-02 15:14:15 得分 0
''下面的是一种加密中含有中文字符的字符串的模块
''加密模块
'Public Function Crypt2(StringToEncrypt As String, Optional AlphaEncoding As Boolean = False) As String
' On Error GoTo ErrorHandler
' Dim Char As String
' Dim i As Integer
' If Trim(StringToEncrypt) = "" Then
' Crypt = StringToEncrypt
' Exit Function
' End If
' Crypt = ""
' For i = 1 To Len(StringToEncrypt)
' Char = Asc(Mid(StringToEncrypt, i, 1))
' Crypt = Crypt & Len(Char) & Char
' Next i
' If AlphaEncoding Then
' StringToEncrypt = Crypt
' Crypt = ""
' For i = 1 To Len(StringToEncrypt)
' Crypt = Crypt & Chr$(Mid(StringToEncrypt, i, 1) + 147)
' Next i
' End If
' Exit Function
'ErrorHandler:
' Encrypt = "Error encrypting string"
'End Function
''解密模块
'Public Function Decrypt2(StringToDecrypt As String, Optional AlphaDecoding As Boolean = False) As String
' On Error GoTo ErrorHandler
' Dim CharCode As String
' Dim CharPos As Integer
' Dim Char As String
' Dim i As Integer
' If Trim(StringToDecrypt) = "" Then
' Decrypt = StringToDecrypt
' Exit Function
' End If
' If AlphaDecoding Then
' Decrypt = StringToDecrypt
' StringToDecrypt = ""
' For i = 1 To Len(Decrypt)
' StringToDecrypt = StringToDecrypt & (Asc(Mid(Decrypt, i, 1)) - 147)
' Next i
' End If
' Decrypt = ""
' Do
' CharPos = Left(StringToDecrypt, 1)
' StringToDecrypt = Mid(StringToDecrypt, 2)
' CharCode = Left(StringToDecrypt, CharPos)
' StringToDecrypt = Mid(StringToDecrypt, Len(CharCode) + 1)
' Decrypt = Decrypt & Chr(CharCode)
' Loop Until StringToDecrypt = ""
' Exit Function
'ErrorHandler:
' Decrypt = "Error decrypting string"
'End Function
''调用方法
'Private Sub cmdCrypt_Click()
' '加密
' txtCrypt.Text = Crypt(txtSource.Text, False)
' '加密后字符化
' txtCryptAlpha.Text = Crypt(txtSource.Text, True)
' '解密
' Form1.Caption = Decrypt(txtCrypt.Text, False)
'End SubTop
4 楼jhliuguiping(jhl)回复于 2004-09-02 15:14:41 得分 0
To 3days(三天):
"所以想能否有另外一种方式把数据库中数据进行加密呢,也
就是说,即使别人利用其他的软件打开了该数据库,看到的也是一片乱码,根本不知道数据库进而是什么内容"
感谢你的帮助,但我用你代码对中文加密后的字串,写不进ACCESS数据库的字段中,我用的是ACCESS数据库,是否不能用在ACCESS数据库中呢?
Top




