• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    解密.NET框架中的加密與解密

    2012-09-10 03:34:18俞志兵
    中國(guó)教育技術(shù)裝備 2012年28期
    關(guān)鍵詞:加密算法非對(duì)稱數(shù)據(jù)流

    俞志兵

    南京市天印高級(jí)中學(xué) 南京 211151

    作者:俞志兵,本科,中學(xué)一級(jí)教師,長(zhǎng)期從事高中信息技術(shù)教學(xué)工作,任信息技術(shù)教研組組長(zhǎng),擅長(zhǎng)網(wǎng)站開(kāi)發(fā)。

    1.NET中加密算法的形式及其概況

    總的來(lái)說(shuō),加密有兩種形式:1)對(duì)稱加密,加密和解密時(shí)使用的是同一個(gè)密鑰;2)非對(duì)稱加密,加密和解密時(shí)將使用不同的密鑰。通常是用公鑰作為加密密鑰,任何人都可以用它來(lái)加密信息。私鑰才是用來(lái)解密密鑰的,它只能用來(lái)對(duì)使用其對(duì)應(yīng)的公鑰加密的數(shù)據(jù)進(jìn)行解密。對(duì)稱加密相對(duì)而言速度更快,但由于加密者和解密者都知道這個(gè)唯一的密鑰,因此安全性更差一些。非對(duì)稱加密則通過(guò)密鑰的方法來(lái)解決這個(gè)問(wèn)題,由于私鑰永遠(yuǎn)不會(huì)暴露,所以第三方更加難以破解其加密的信息。由于密鑰的方法需要更長(zhǎng)的處理時(shí)間,因此通常的方法是使用非對(duì)稱密鑰加密機(jī)制在因特網(wǎng)上實(shí)現(xiàn)對(duì)對(duì)稱密鑰的加密,這樣就使這個(gè)用于加密的密鑰更安全,不會(huì)暴露給第三方。

    在.NET的命名空間System.Security.Cryptography中提供了幾種算法??捎玫姆菍?duì)稱算法包括DSA(Digital Signature Algorithm,數(shù)字簽名算法)和RSA(Rivest-Shamir-Adleman算法,它由3個(gè)發(fā)明者的名字組成:Ronald Rivest、Adi Shamir和Leonard Adleman)兩種。其中DSA只能夠用來(lái)對(duì)數(shù)據(jù)進(jìn)行“簽名”,因此通常用來(lái)做驗(yàn)證,而RSA更加通用。DSA現(xiàn)在是美國(guó)政府使用的數(shù)字驗(yàn)證的標(biāo)準(zhǔn)。

    .NET框架中可以找到的對(duì)稱加密算法包括DES(Data Encryption Standard,數(shù)字加密標(biāo)準(zhǔn))、Triple DES(3DES)、RC2(Ron’s Code或Rivest’s Cipher,都是源于Ronald Rivest)和Rijndael(源于其發(fā)明者John Daemem、Vincent Rijman的名字)。DES成為標(biāo)準(zhǔn)已經(jīng)有一段時(shí)間,盡管它也不斷發(fā)生變化。3DES和RC2都是DES的變種。3DES是通過(guò)對(duì)數(shù)據(jù)進(jìn)行3次獨(dú)立的DES加密,扣除奇偶校驗(yàn)位,其總的密鑰長(zhǎng)度也達(dá)到168位。RC2的密鑰長(zhǎng)度是可以變化的,最大可以達(dá)到128(如果要更長(zhǎng)的密鑰,可以使用RC3、RC4等),因此根據(jù)密鑰長(zhǎng)度不同,可能比DES更脆弱或更強(qiáng)壯。Rijndael是一種完全不同的加密方法,現(xiàn)在已經(jīng)被接納為新的AES(高級(jí)加密標(biāo)準(zhǔn))。該標(biāo)準(zhǔn)的目標(biāo)是替代DES。

    2 對(duì)加密、解密算法的步驟描述

    由于.NET框架中的類是針對(duì)數(shù)據(jù)流進(jìn)行優(yōu)化的,因此需要花一些時(shí)間來(lái)處理數(shù)據(jù)格式轉(zhuǎn)換。同樣需要定義一個(gè)密鑰以及執(zhí)行加密或解密操作的初始向量(IV)。需要使用IV應(yīng)歸究于加密的本性:為一串?dāng)?shù)據(jù)位計(jì)算加密值時(shí),將會(huì)用到前面一串?dāng)?shù)據(jù)位的加密值。由于在加密開(kāi)始時(shí)并不存在這些值,因此用IV來(lái)代替。在實(shí)踐中,IV和密鑰都將表示為一個(gè)字節(jié)的數(shù)組,而在DES加密中,其長(zhǎng)度是64位(8字節(jié)),由于解密算法與加密算法類似,加密需要寫(xiě)入加密數(shù)據(jù)的目標(biāo)數(shù)據(jù)流,而解密需要一個(gè)從中讀取已加密數(shù)據(jù)的源數(shù)據(jù)流。

    對(duì)一個(gè)字符串進(jìn)行加密所需的步驟:將源字符串轉(zhuǎn)換為一個(gè)字節(jié)數(shù)組;初始化一個(gè)加密算法類;使用這個(gè)加密算法類來(lái)生成一個(gè)加密者(encryptor)對(duì)象,實(shí)現(xiàn)Icrypto-Transform接口,它需要密鑰和IV值;使用加密者對(duì)象來(lái)初始化一個(gè)密文數(shù)據(jù)流(CryptoStream對(duì)象),該數(shù)據(jù)流還需要知道要加密哪些數(shù)據(jù),以及用來(lái)寫(xiě)入加密數(shù)據(jù)的目標(biāo)數(shù)據(jù)流;使用這個(gè)密文數(shù)據(jù)流生成已加密數(shù)據(jù),并寫(xiě)到由前面創(chuàng)建的源字節(jié)數(shù)組創(chuàng)建的目標(biāo)內(nèi)存數(shù)據(jù)流中;獲取存儲(chǔ)在這個(gè)數(shù)據(jù)流中的字節(jié)數(shù)據(jù);將這些字節(jié)數(shù)據(jù)轉(zhuǎn)換成一個(gè)字符串。

    解密所采用的模式與加密類似:將源字符串轉(zhuǎn)換成一個(gè)字節(jié)數(shù)組;根據(jù)這個(gè)字節(jié)數(shù)組填充內(nèi)存數(shù)據(jù)流的值;初始化一個(gè)加密算法類;使用加密算法類生成一個(gè)解密者(decryptor)對(duì)象,實(shí)現(xiàn)ICryptoTransform接口,它需要密鑰和IV值;使用解密者對(duì)象來(lái)初始化一個(gè)密文數(shù)據(jù)流(ICryptoStream)對(duì)象,該數(shù)據(jù)流還需要知道解密什么數(shù)據(jù),并需要一個(gè)從中讀取已加密數(shù)據(jù)的源數(shù)據(jù)流;使用密文數(shù)據(jù)流來(lái)讀取已經(jīng)解密數(shù)據(jù)(可以使用StreamReader.ReadToEnd方法來(lái)獲取字符串型結(jié)果)。

    3 根據(jù)加密算法寫(xiě)出加密方法

    限于篇幅,本文只給出加密方法,讀者可以根據(jù)加密方法自己寫(xiě)出解密方法。

    在網(wǎng)站根目錄下,新建文件夾(SecurityLib),在這個(gè)文件夾中新建類,命名為StringEncryptor。其Encrypt()方法如下所示:

    public static string Encrypt(string sourceData)

    {

    set key and initialization vector values

    byte[] key = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };

    byte[] iv = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };

    try

    { convert data to byte array

    byte[] sourceDataBytes =

    System.Text.ASCIIEncoding.ASCII.GetBytes(sourceData);

    get target memory stream

    MemoryStream tempStream = new MemoryStream();

    get encryptor and encryption stream

    DESCryptoServiceProvider encryptor =

    new DESCryptoServiceProvider();

    CryptoStream encryptionStream =

    new CryptoStream(tempStream,

    encryptor.CreateEncryptor(key, iv),

    CryptoStreamMode.Write);

    encrypt data

    encryptionStream.Write(sourceDataBytes, 0,

    sourceDataBytes.Length);

    encryptionStream.FlushFinalBlock();

    put data into byte array

    byte[] encryptedDataBytes = tempStream.GetBuffer();

    convert encrypted data into string

    return Convert.ToBase64String(encryptedDataBytes, 0,(int)tempStream.Length);

    }

    }

    4 加密與解密在.NET中的測(cè)試

    1)網(wǎng)站根目錄下新建Web頁(yè)面,命名為SecurityTest.asp,做如下編輯:

    Enter data to encrypt:


    Enter data to decrypt:



    2)修改SecurityTest.aspx.cs中的代碼:

    using System;

    using System.Text;

    using SecurityLib;

    protected void processButton_Click(object sender, EventArgs e)

    {

    string stringToEncrypt = encryptBox.Text;

    string stringToDecrypt = decryptBox.Text;

    string encryptedString =

    StringEncryptor.Encrypt(stringToEncrypt);

    if (stringToDecrypt == "")

    {

    stringToDecrypt = encryptedString;

    }

    string decryptedString =

    StringEncryptor.Decrypt(stringToDecrypt);

    StringBuilder sb = new StringBuilder();

    sb.Append(“Encrypted data: “);

    sb.Append(encryptedString);

    sb.Append(“
    Decrypted data: “);

    sb.Append(decryptedString);

    result.Text = sb.ToString();

    }

    3)在瀏覽器中運(yùn)行SecurityTest.aspx,在第一個(gè)要加密的文本框中輸入“i am yuzhibing”,然后點(diǎn)擊Process按鈕,其結(jié)果如圖1所示。

    5 加密與解密在實(shí)踐中的應(yīng)用

    現(xiàn)在絕大部分電子商務(wù)網(wǎng)站或平臺(tái),都需要用戶檔案系統(tǒng),需要用戶編輯客戶詳情,包括信用卡詳情。信用卡中的信息出于安全因素考慮,必須加密后保存到數(shù)據(jù)層的數(shù)據(jù)庫(kù)中。登錄客戶編輯自己的信息,就需要從數(shù)據(jù)庫(kù)中解密到表示層。

    [1]鄭齊心,房大偉,劉云峰.ASP.NET項(xiàng)目開(kāi)發(fā)案例全程實(shí)錄[M].2版.北京:清華大學(xué)出版社,2011.

    [2]趙松濤,陳小龍.Visual Studio 2005+SQL Server2005數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開(kāi)發(fā)[M].北京:電子工業(yè)出版社,2007.

    [3]Darie C, Watson K. ASP.NET 2.0電子商務(wù)開(kāi)發(fā)實(shí)戰(zhàn)[M].北京:人民郵電出版社,2007.

    猜你喜歡
    加密算法非對(duì)稱數(shù)據(jù)流
    汽車維修數(shù)據(jù)流基礎(chǔ)(下)
    非對(duì)稱Orlicz差體
    一種提高TCP與UDP數(shù)據(jù)流公平性的擁塞控制機(jī)制
    點(diǎn)數(shù)不超過(guò)20的旗傳遞非對(duì)稱2-設(shè)計(jì)
    基于小波變換和混沌映射的圖像加密算法
    基于數(shù)據(jù)流聚類的多目標(biāo)跟蹤算法
    非對(duì)稱負(fù)載下矩陣變換器改進(jìn)型PI重復(fù)控制
    Hill加密算法的改進(jìn)
    北醫(yī)三院 數(shù)據(jù)流疏通就診量
    對(duì)稱加密算法RC5的架構(gòu)設(shè)計(jì)與電路實(shí)現(xiàn)
    衡阳市| 岫岩| 苏尼特左旗| 西平县| 全州县| 南漳县| 贺州市| 吴堡县| 罗山县| 道孚县| 宿松县| 蒲江县| 宁夏| 会东县| 瓮安县| 曲麻莱县| 当阳市| 太和县| 汾西县| 济源市| 通城县| 祁门县| 邵阳县| 洪洞县| 灵台县| 吉木萨尔县| 大丰市| 屯留县| 牙克石市| 临高县| 广元市| 八宿县| 台中市| 新邵县| 买车| 宜兴市| 武乡县| 崇义县| 漠河县| 潜山县| 塔城市|