"采用DES算法"這個(gè)說(shuō)法不明確,首先是使用多少位的DES進(jìn)行加密,通常是128位或192位,其次是,要先把主密鑰轉(zhuǎn)化成散列,才能供DES進(jìn)行加密,轉(zhuǎn)化的方法是什么沒(méi)有明確,通常是md5,所以有的銀行卡說(shuō)是128位md5 3DS就是指用md5轉(zhuǎn)換主密鑰散列,用DES進(jìn)行加密,但是DES本身是64位(包含校驗(yàn)碼),2DES是128位,3DES是192位,但是沒(méi)有2DES的叫法,所以128位、192位統(tǒng)稱(chēng)3DES
成都創(chuàng)新互聯(lián),為您提供成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)站營(yíng)銷(xiāo)推廣、網(wǎng)站開(kāi)發(fā)設(shè)計(jì),對(duì)服務(wù)純水機(jī)等多個(gè)行業(yè)擁有豐富的網(wǎng)站建設(shè)及推廣經(jīng)驗(yàn)。成都創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司成立于2013年,提供專(zhuān)業(yè)網(wǎng)站制作報(bào)價(jià)服務(wù),我們深知市場(chǎng)的競(jìng)爭(zhēng)激烈,認(rèn)真對(duì)待每位客戶(hù),為客戶(hù)提供賞心悅目的作品。 與客戶(hù)共同發(fā)展進(jìn)步,是我們永遠(yuǎn)的責(zé)任!
要完整的md5+3DS實(shí)例,需要100分以上,要不到我的空間中查找相關(guān)的文章
首先在項(xiàng)目的VB.NET界面,使用菜單【項(xiàng)目】--【添加引用】--【COM】
選擇 ?Microsoft ADO Ext. 2.x for DDL and Security
然后單擊【確定】,完成引用。
完整代碼如下:
Imports?ADOX
Public?Class?Form1
Private?Sub?Button1_Click(ByVal?sender?As?System.Object,?ByVal?e?As?System.EventArgs)?Handles?Button1.Click
'創(chuàng)建空的access數(shù)據(jù)庫(kù)文件--數(shù)據(jù)庫(kù)文件.mdb,密碼為123
Dim?Mycat?As?Catalog?=?New?Catalog()
Mycat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Jet?OLEDB:Engine?Type=5;Data?Source=?數(shù)據(jù)庫(kù)文件.mdb;Jet?OLEDB:Database?Password=123")
'以下代碼創(chuàng)建一個(gè)名為“實(shí)驗(yàn)數(shù)據(jù)表”
Dim?MyTable?As?ADOX.Table?=?New?ADOX.Table?????????'定義新表
MyTable.Name?=?"實(shí)驗(yàn)數(shù)據(jù)表"????'表命名
'給表“實(shí)驗(yàn)數(shù)據(jù)表”?創(chuàng)建一個(gè)字符串字段,字段名“姓名”
MyTable.Columns.Append("姓名",?,?ADOX.DataTypeEnum.adWChar)
'給表“實(shí)驗(yàn)數(shù)據(jù)表”?創(chuàng)建一個(gè)整數(shù)字段,字段名“學(xué)號(hào)”
MyTable.Columns.Append("學(xué)號(hào)",?ADOX.DataTypeEnum.adInteger)????'追加一個(gè)數(shù)字型字段
'給字段“學(xué)號(hào)”創(chuàng)建一個(gè)主鍵“PimaryKey_Field”????????
MyTable.Keys.Append("學(xué)號(hào)",?ADOX.KeyTypeEnum.adKeyPrimary,?"學(xué)號(hào)")
Mycat.Tables.Append(MyTable)?'把所有的新字段追加到表
MyTable?=?Nothing
Mycat?=?Nothing
End?Sub
End?Class
字節(jié)逐位倒排序加密法是以比特為單位的換位加密方法,用VB實(shí)現(xiàn)的具體算法是:
(1) 以二進(jìn)制模式打開(kāi)源文件;
(2) 從源文件第I位讀取一個(gè)字節(jié),假設(shè)為字母“A”,得到“A”的ASCII值為65;
(3) 將65轉(zhuǎn)換成八位二進(jìn)制串為“01000001”;
(4) 將“01000001”按字節(jié)逐位倒排序得另一個(gè)八位二進(jìn)制串“10000010”;
(5) 將“10000010”轉(zhuǎn)換成十進(jìn)制再寫(xiě)回源文件第I位置,完成一個(gè)字節(jié)的加密;
(6) 重復(fù)(2)、(3)、(4)和(5),直到所有字節(jié)加密結(jié)束。
為了使程序模塊化,我們用函數(shù)過(guò)程ByteToBin完成將字節(jié)型數(shù)據(jù)轉(zhuǎn)換成二進(jìn)制串(其實(shí)質(zhì)就是將十進(jìn)制數(shù)轉(zhuǎn)換成八位二進(jìn)制串);用函數(shù)過(guò)程BinToByte將二進(jìn)制串轉(zhuǎn)換成字節(jié)型數(shù)據(jù)(實(shí)質(zhì)是將八位二進(jìn)制串轉(zhuǎn)換成十進(jìn)制數(shù)):用函數(shù)過(guò)程Reverse將八位二進(jìn)制串逐位倒排序。具體程序如下:
Function ByteToBin(m As Byte) As String ' 將字節(jié)型數(shù)據(jù)轉(zhuǎn)換成八位二進(jìn)制字符串
Dim c$
c$ = ""
Do While m 0
r = m Mod 2
m = m \ 2
c$ = r c$
Loop
c$ = Right("00000000" c$, 8)
ByteToBin = c$
End Function
Function Reverse(m As String) As String ' 將八位二進(jìn)制字符串顛倒順序
Dim i%, x$
x = ""
For i = 1 To 8
x = Mid(m, i, 1) x
Next i
Reverse = x
End Function
Function BinToByte(m As String) As Byte ' 將八位二進(jìn)制串轉(zhuǎn)換成十進(jìn)制
Dim x As String * 1, y%, z%
z = 0
For i = 1 To 8
x = Mid(m, i, 1)
y = x * 2 ^ (8 - i)
z = z + y
Next i
BinToByte = z
End Function
Private Sub Command1_Click()
Dim x As Byte, i%, fname$
fname = InputBox("請(qǐng)輸入要加密的文件名!注意加上路徑名:")
If Dir(fname) = "" Then
MsgBox "文件不存在!"
Exit Sub
End If
Open fname For Binary As #1 ' 以二進(jìn)制訪(fǎng)問(wèn)模式打開(kāi)待加密文件
For i = 1 To LOF(1) ' LOF函數(shù)是求文件長(zhǎng)度的內(nèi)部函數(shù)
Get #1, i, x ' 取出第i個(gè)字節(jié)
x = BinToByte(Reverse(ByteToBin(x))) ' 這里調(diào)用了三個(gè)自定義函數(shù)
Put #1, i, x ' 將加密后的這個(gè)字節(jié)寫(xiě)回到文件原位置
Next i
Close
MsgBox "任務(wù)完成!"
End Sub
本例可以完成對(duì)任意文件的加密與解密,對(duì)同一文件作第一次處理為加密,第二次處理為解密。要調(diào)試本程序,可用記事本在C盤(pán)根目錄下任意建立一個(gè)文本文件(假設(shè)為文件名為aaa.txt),其中的內(nèi)容任意(可以包括字母、漢字、數(shù)字、回車(chē)符、換行符等)。運(yùn)行本程序后,在輸入文件名的對(duì)話(huà)框中輸入文件名(如:“C:\aaa.txt”)后回車(chē),即可完成對(duì)文件的加密。文件加密后,可以在記事本中打開(kāi)該文件查看加密效果。如果想解密,可再次運(yùn)行該程序并輸入相同文件名。