public function EnDeCode(bytes() as byte, byval strKey as string) as byte() dim lKey as long dim lCount as long dim i as long dim bytesOut() as bytelKey = crc16(strKey) // 找一个CRC算法,把strKey转换成整型CRC值rnd -1 * (abs(lkey)) // 产生一个负数的随机种子 lcount = ubound(bytes) redim bytesOut(lcount) for i = 0 to lcount bytesout(i) = bytes(i) xor ( (rnd() * 10000) mod &HFF) next EnDeCode = bytesOut end function第一次运行该函数为加密,第二次运行该函数为解密, 随手写的,没测试,原理应该没问题
数据传输中如果安全性要求比较高的话可以使用RSA加密。网上找找有这样的VB程序的。
strKey有什么要求呢?每次指定一个字符串?
bdzwj你帮偶写个crc16()吧,谢啦.
unction CRC16(pBytes() As Byte, ByVal nSize As Long) As Long Dim CRC16Lo As Byte, CRC16Hi As Byte 'CRC寄存器 Dim CL As Byte, CH As Byte '多项式码&HA001 Dim SaveHi As Byte, SaveLo As Byte Dim i As Long Dim Flag As Integer CRC16Lo = &HFF CRC16Hi = &HFF CL = &H1 CH = &HA0 For i = nIndex To nSize CRC16Lo = CRC16Lo Xor pBytes(i) '每一个数据与CRC寄存器进行异或 For Flag = 0 To 7 SaveHi = CRC16Hi SaveLo = CRC16Lo CRC16Hi = CRC16Hi \ 2 '高位右移一位 CRC16Lo = CRC16Lo \ 2 '低位右移一位 If ((SaveHi And &H1) = &H1) Then '如果高位字节最后一位为1 CRC16Lo = CRC16Lo Or &H80 '则低位字节右移后前面补1 End If '否则自动补0 If ((SaveLo And &H1) = &H1) Then '如果LSB为1,则与多项式码进行异或 CRC16Hi = CRC16Hi Xor CH CRC16Lo = CRC16Lo Xor CL End If Next Flag
Next i
' ' 返回CRC ' Dim ReturnData(1) As Byte ReturnData(0) = CRC16Hi 'CRC高位 ReturnData(1) = CRC16Lo 'CRC低位 CopyMemory ByVal VarPtr(CRC16), ByVal VarPtr(ReturnData(0)), 2 End Function' ' 获取CRC16 dim bytesCRC() as byte bytesCRC = strconv(strKey, vbFromUnicode) lkey = crc16(bytescrc, ubound(bytesCRC) + 1)
dim lKey as long
dim lCount as long
dim i as long
dim bytesOut() as bytelKey = crc16(strKey) // 找一个CRC算法,把strKey转换成整型CRC值rnd -1 * (abs(lkey)) // 产生一个负数的随机种子
lcount = ubound(bytes) redim bytesOut(lcount)
for i = 0 to lcount
bytesout(i) = bytes(i) xor ( (rnd() * 10000) mod &HFF)
next
EnDeCode = bytesOut
end function第一次运行该函数为加密,第二次运行该函数为解密, 随手写的,没测试,原理应该没问题
strKey有什么要求呢?每次指定一个字符串?
Dim CRC16Lo As Byte, CRC16Hi As Byte 'CRC寄存器
Dim CL As Byte, CH As Byte '多项式码&HA001
Dim SaveHi As Byte, SaveLo As Byte
Dim i As Long
Dim Flag As Integer
CRC16Lo = &HFF
CRC16Hi = &HFF
CL = &H1
CH = &HA0
For i = nIndex To nSize
CRC16Lo = CRC16Lo Xor pBytes(i) '每一个数据与CRC寄存器进行异或
For Flag = 0 To 7
SaveHi = CRC16Hi
SaveLo = CRC16Lo
CRC16Hi = CRC16Hi \ 2 '高位右移一位
CRC16Lo = CRC16Lo \ 2 '低位右移一位
If ((SaveHi And &H1) = &H1) Then '如果高位字节最后一位为1
CRC16Lo = CRC16Lo Or &H80 '则低位字节右移后前面补1
End If '否则自动补0
If ((SaveLo And &H1) = &H1) Then '如果LSB为1,则与多项式码进行异或
CRC16Hi = CRC16Hi Xor CH
CRC16Lo = CRC16Lo Xor CL
End If
Next Flag
Next i
'
' 返回CRC
'
Dim ReturnData(1) As Byte
ReturnData(0) = CRC16Hi 'CRC高位
ReturnData(1) = CRC16Lo 'CRC低位
CopyMemory ByVal VarPtr(CRC16), ByVal VarPtr(ReturnData(0)), 2
End Function'
' 获取CRC16
dim bytesCRC() as byte
bytesCRC = strconv(strKey, vbFromUnicode)
lkey = crc16(bytescrc, ubound(bytesCRC) + 1)
提示CRC16Lo = CRC16Lo Xor pBytes(i) 越界,
我把它修改成lkey = crc16(bytescrc, ubound(bytesCRC))就没报错了.呵呵.