[分享]DES加解密类(VB6.0源代码)
<p>在问专家网站里找的,原网址如下:</p><p>http://www.china-askpro.com/msg1/qa88.shtml</p><p>这里是我上传的:</p><p></p> 牛B,我喜欢 <p>'我没有用三重DES,只要能实现简单的加解密就行了<br/>'但我运行这段代码时总出现"下标越界"的错误<br/>'作者说已经经过测试了,我怀疑是我的代码有问题<br/>'大虾能否帮忙做个例子?</p><p>'-------------------------------------------------------------<br/>''以下是我实现加密的代码<br/>'传进一个字符串 str<br/>'返回Encode 加密后的串<br/>'-------------------------------------------------------------<br/>Public Function Encode(ByVal str As String) As String</p><p><br/> Dim bin() As Byte '输入<br/> Dim bout() As Byte '输出<br/> Dim bKey() As Byte 'Key<br/> <br/> Dim sResult As String<br/> <br/> bin = StrConv(str, vbFromUnicode)<br/> <br/> DES.SetKey bKey<br/> DES.EncryptDes_ArrToArr bin, bout, , 2</p><p> sResult = StrConv(bout, vbUnicode)<br/> <br/> Encode = sResult<br/>End Function</p> <p>增加一个调用例子:</p><p> </p>
<p><font face="Verdana">Sub Main()<br/> Dim I As New cDES<br/> Dim key1(7) As Byte<br/> Dim tmpArr1() As Byte, tmpArr2() As Byte, tmpArr3() As Byte<br/> <br/> key1(0) = 1: key1(1) = 2: key1(2) = 3: key1(3) = 4: key1(4) = 5: key1(5) = 6: key1(6) = 7: key1(7) = 8<br/> '以上是密钥<br/> <br/> tmpArr1 = StrConv("www.m5home.com", vbUnicode)<br/> '以上是欲加密的内容<br/> <br/> I.SetKey key1 '设置密钥<br/> <br/> MsgBox "开始加密"<br/> <br/> I.EncryptDes_ArrToArr tmpArr1, tmpArr2 '加密<br/> <br/> MsgBox "加密后的内容 = " & vbCrLf & StrConv(tmpArr2, vbUnicode)<br/> Debug.Print StrConv(tmpArr2, vbFromUnicode)<br/> <br/> MsgBox "开始解密"<br/> <br/> I.EncryptDes_ArrToArr tmpArr2, tmpArr3, , 2 '解密<br/> <br/> MsgBox "解密后的内容 = " & vbCrLf & StrConv(tmpArr3, vbFromUnicode)<br/> Debug.Print StrConv(tmpArr3, vbFromUnicode)<br/>End Sub</font></p> 谢谢 老马 刚才我在QQ里问的你 <p>老马 </p>
<p><font face="Verdana">如果我要对"医院"加密,好像解密出来的是"医b".<br/>我试了下,只要最后一个字符是"院",好像解密都有问题</font>,"院"经过加密解密后就变成了"b",不知道是什么原因</p> <p>中文加密的话可能还需要研究一下</p>
<p> </p>
<p>晚上回来看看.</p> <div class="msgheader">QUOTE:</div><div class="msgborder"><b><font face="Verdana"><br/>Sub Main()<br/> Dim I As New cDES<br/> Dim key1(7) As Byte<br/> Dim tmpArr1() As Byte, tmpArr2() As Byte, tmpArr3() As Byte<br/> <br/> key1(0) = 1: key1(1) = 2: key1(2) = 3: key1(3) = 4: key1(4) = 5: key1(5) = 6: key1(6) = 7: key1(7) = 8<br/> '以上是密钥<br/> <br/> tmpArr1 = StrConv("测试中文字符串", vbFromUnicode)<br/> '以上是欲加密的内容<br/> <br/> I.SetKey key1 '设置密钥<br/> <br/> MsgBox "开始加密"<br/> <br/> I.EncryptDes_ArrToArr tmpArr1, tmpArr2 '加密<br/> <br/> MsgBox "加密后的内容 = " & vbCrLf & StrConv(tmpArr2, vbUnicode)<br/> Debug.Print StrConv(tmpArr2, vbUnicode)<br/> <br/> MsgBox "开始解密"<br/> <br/> I.EncryptDes_ArrToArr tmpArr2, tmpArr3, , 2 '解密<br/> <br/> MsgBox "解密后的内容 = " & vbCrLf & StrConv(tmpArr3, vbUnicode)<br/> Debug.Print StrConv(tmpArr3, vbUnicode)<br/>End Sub<br/></font></b></div>
<p> </p>
<p>是我的一个低级错误...........暴汗呀</p>
<p> </p>
<p>转换进去时先用<font face="Verdana">vbFromUnicode</font>......因为VB里的字符串本身就是UNICODE的.....</p>
<p> </p>
<p>出来后再<font face="Verdana">vbUnicode</font>..........汗汗汗......</p>
<p> </p>
<p>要不是魏滔序一句点醒,我还打算自己写个字节数组转换/还原函数</p>
<p> </p>
<p>最近智商严重下降- -!</p> 嘿嘿 ,谢谢老马 ,学习老马严谨的治学态度。 <p><font face="Verdana">老马 又有新的问题了<br/>我在你给的实例基础上,写了个函数,目的是在程序中方便使用,比如对数据加密后写进数据库,然后从数据库中取出数据再解密。字符串和字节数组的转换,我还搞不太明白,不知道我的函数中出了什么问题,帮忙看下吧 谢谢!</font></p>
<p><font face="Verdana">Public Function gEncryptDes(ByVal strEncryptString <font face="Verdana">As String</font>, ByVal intFlag As Integer) As String<br/> '参数intFlag,1表示加密,2表示解密<br/> Dim i As New cDES<br/> Dim key1(7) As Byte<br/> Dim tmpArr1() As Byte, tmpArr2() As Byte<br/> <br/> Dim strTemp As String<br/> <br/> key1(0) = 1: key1(1) = 2: key1(2) = 3: key1(3) = 4: key1(4) = 5: key1(5) = 6: key1(6) = 7: key1(7) = 8<br/> '以上是密钥<br/> <br/> i.SetKey key1 '设置密钥<br/> <br/> If intFlag = 1 Then '加密<br/> tmpArr1 = StrConv(strEncryptString, vbFromUnicode) '欲加密的内容<br/> i.EncryptDes_ArrToArr tmpArr1, tmpArr2 '加密<br/> strTemp = StrConv(tmpArr2, vbUnicode)<br/> Else '解密<br/> tmpArr1 = StrConv(strEncryptString, vbFromUnicode)<br/> i.EncryptDes_ArrToArr tmpArr1, tmpArr2, , 2 '解密<br/> strTemp = StrConv(tmpArr2, vbUnicode)<br/> End If<br/> <br/> gEncryptDes = strTemp<br/>End Function<br/></font></p>
<p>我在程序中这样调用:</p>
<p> </p>
<p><font face="Verdana">Private Sub Command1_Click()<br/> <font face="Verdana">Debug.Print</font> gEncryptDes(gEncryptDes("大家好", 1), 2)</font></p>
<p><font face="Verdana">End Sub<br/></font></p>
<p>显示的结果不是"大家好",而是乱码。</p>
[此贴子已经被作者于2008-12-23 16:10:36编辑过] <p>已经解决了</p>
<p><font face="Verdana"> If intFlag = 1 Then '加密<br/> tmpArr1 = StrConv(strEncryptString, vbFromUnicode) '欲加密的内容<br/> i.EncryptDes_ArrToArr tmpArr1, tmpArr2 '加密<br/>' strTemp = StrConv(tmpArr2, vbUnicode)<br/> strTemp = tmpArr2<br/> Else '解密<br/>' tmpArr1 = StrConv(strEncryptString, vbFromUnicode)<br/> tmpArr1 = strEncryptString<br/> i.EncryptDes_ArrToArr tmpArr1, tmpArr2, , 2 '解密<br/> strTemp = StrConv(tmpArr2, vbUnicode)<br/> End If</font></p>
<p><font face="Verdana"></font> </p>
<p><font face="Verdana">错误的部分已经注释掉了 还是谢谢老马</font></p>
<p><font face="Verdana">原来字节数组和字符串之间可以直接赋值的,晕</p>
<p><br/></font><br/></p> <p>哪里有hex之类的教程啊, 谢谢啦</p> 什么HEX教程?加密?
页:
[1]