• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    用VB實現數據的加解密算法

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 86次 | 進入軟件測試論壇討論

    領測軟件測試網   隨著計算機應用的普及,信息的安全性越來越受到人們的重視,對數據加解密算法的研究也在不斷地深入,但一般的加解密算法如DES和RSA等過于復雜,且運算速度慢,特別是它的移位操作,對于VB這樣的高級語言實現起來也比較困難。而一般的MIS(Management Information System)系統多用高級語言開發,對數據的加密要求不高,因此,研究簡易數據加解密算法還是有相當的現實意義。  

    簡易加解密算法要求:  
      1、 算法不宜過于復雜,且具有一定的保密性  
      2、 對于高級語言很容易能實現  
      3、 速度快,可以在任何時候、任何地方使用。  
      4、 加密后的數據能正確地得到解密  

      鑒于以上特點,從加密的主要方法看,換位法過于簡單,特別是對于數據量少的情況很容易由密文猜出明文,替換法則不失為一種行之有效的簡易算法。  

      首先,Windows下的字符集采用Unicode字符集,它容量大,可置換的范圍廣;其次,在Unicode字符集中,所有字符的內碼都占兩個字節,不再象DOS下西文字符占一個字節,中文字符占兩個字節,這樣無論西文還是中文都可以互換。因此,將某個字符的高字節和低字節分別加以運算,生成另外一個0-255之間的數,然后再將它們合成為另一個字符,從而置換數據達到數據加密的作用,解密時則相反。  

      從各種位運算的特點看,異或運算最適合用于簡易加解密運算,因為當一個數A和另一個數B進行異或運算會生成另一個數C,如果再將C和B進行異或運算則C又會還原為A。如:128和253進行異或運算的結果是125,125和253再進行異或運算則結果又是128。其中,128就是要加密的數據,253則是密鑰。利用這個特性可以將加密和解密用一個函數實現。用同一密鑰進行奇數次運算時,是對數據進行加密運算,當進行偶數次運算時,是對數據進行解密運算。如果對Unicode字符進行這種運算,需要兩個密鑰,其取值范圍為0-255,其中一個用于對高字節加密,一個用于對低字節進行加密,這樣對同一字符的加密就有255×255=65025種可能。
    如果更換密鑰后對密文再進行加密,則會有無窮的可能性。如:密鑰K1=68,K2=134,則字符A的低字節為65,它和K1異或后為5,A的高字節為0,它和K2異或后還是134,兩者合成的字符為"蘅"。再如:"密"的低字節為198,和K1異或后為130,它的高字節為91,和K2異或后為221,兩者合成則為一個不可見的字符。  
      這種加解密數據的方法對任何字符都是有效的,不象有些簡易加密算法,只對西文字符有效,對中文加密后再解密無法還原為原來的字符。根據以上原理可以寫出以下VB函數,用于對數據進行加密和解密運算:  

    Private Function Encrypt(ByVal strSource As String, ByVal Key1 As Byte, _  
    ByVal Key2 As Integer) As String  
    Dim bLowData As Byte  
    Dim bHigData As Byte  
    Dim i As Integer  
    Dim strEncrypt As String  
    Dim strChar As String  
    For i = 1 To Len(strSource)  

     ‘從待加(解)密字符串中取出一個字符  

     strChar = Mid(strSource, i, 1)  

     ‘取字符的低字節和Key1進行異或運算  

     bLowData = AscB(MidB(strChar, 1, 1)) Xor Key1  

     ‘取字符的高字節和K2進行異或運算  

     bHigData = AscB(MidB(strChar, 2, 1)) Xor Key2  

     ‘將運算后的數據合成新的字符  

     strEncrypt = strEncrypt & ChrB(bLowData) & ChrB(bHigData)  

    Next  
    Encrypt = strEncrypt  
    End Function  

      如果strSource="這是一個被加密的字符串&=188,Key2=24,則加密后的串為:"靨?嚼?逗??游??嚎",重新將結果再次進行加密運算則還原為原來的字符串。其中"?"處為不可見字符。  

      以上程序只是從原理上分析后給出的實例,在實際運用當中應從字符密鑰中分別求出Key1和Key2,然后將加密后的數據再更換Key1和Key2反復進行多次加密運算,并結合換位法實現更大難度的加解密算法。只是需要注意的是,加密和解密應分別寫出對應的函數,解密的順序和加密的順序正好是相反的。  

      以上程序在中文VB6中以不同語言的字符進行過多次測驗并通過。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>