熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

使用ASP加密算法加密你的數據

2013-11-13 10:13:30  來源: .NET編程 

  簡介
  
  首先簡單介紹一下有關加密的背景由於美國禁止幾種密碼算法的對外出口的加密位數(例如SSL的位加密限制)本文將介紹一種ASP可以使用的簡單字符加密算法而不是那些受限制的加密算法其實這裡介紹的加密算法對於一般的運用來說已經足夠解密人麻煩一陣子的了它的加密基礎是最簡單的Vernum密碼方法我將在下一篇文章中介紹這種密碼
  
  它的基本原理是需要有一個需要加密的
  
  明文和一個隨機生成的解密鑰匙文件然後使用這兩個文件組合起來生成密文
  (明文) 組合 (密鑰) = 加密後的密文
  
  所以本文介紹的是生成密鑰的代碼我們假設我們生成的密鑰為位長的密鑰它已經足夠來加密一個文本字符了代碼如下
  
  KeyGeNasp文件
  <%
  ******************************
   KeyGeNasp
  ******************************
  Const g_KeyLocation = C:\keytxt
  Const g_KeyLen =
  
  On Error Resume Next
  
  Call WriteKeyToFile(KeyGeN(g_KeyLen)g_KeyLocation)
  
  if Err <> Then
  ResponseWrite ERROR GENERATING KEY & <P>
  ResponseWrite ErrNumber & <BR>
  ResponseWrite ErrDescription & <BR>
  Else
  ResponseWrite KEY SUCCESSFULLY GENERATED
  End If
  
  Sub WriteKeyToFile(MyKeyStringstrFileName)
  Dim keyFile fso
  set fso = ServerCreateObject(scriptingFileSystemObject)
  set keyFile = fsoCreateTextFile(strFileName true)
  keyFileWriteLine(MyKeyString)
  keyFileClose
  End Sub
  
  Function KeyGeN(iKeyLength)
  Dim k iCount strMyKey
  lowerbound =
  upperbound =
  Randomize Initialize randomnumber generator
  For I = to iKeyLength
  s =
  k = Int(((upperbound lowerbound) + ) * Rnd + lowerbound)
  strMyKey = strMyKey & Chr(k) &
  next
  KeyGeN = strMyKey
  End Function
  
  %>
  
  在IIS下運行上面的KeyGeNasp頁面你只需要如此做一次他將把密鑰寫入文件c:\keytxt中 (如果你願意的話你也可以把這個文件放到另外一個更加安全的地方)然後你可以打開這個keytxt文件它將包含個ASCII碼在之間的字符並且由於是隨機生成的所以每個人的私人密鑰文件keytxt將是不一樣的下面是一個例子密鑰文件
  
  IY/;$>=)?^+M#Q]VOIIQ=OFMC`:P_B;<R/U)XFHC
  <SR_E$DLG=I+@%*+OP:F_=;NSY`^S`AA=BJM
  WF#TLGK(=/<:+CK/^AI$;PUOME+TND?W$C(J\;
  MLDF%%TF_&KAD[P#*JU%`RFCMF
  (#TUFZ=>#+AW_/+]DIB;DTIATT&)O/*FM>
  HXHW^Y*=+*^`^PKJ(=E/X#A:?S>R&T;+B#<:*
  \@)XF`_`%QAZ?_T#$#FWWPBH^*<])A(
  S@AVDC^QR^TD?(+YEX+*+U$:XO^Q]KG&N];
  [LJ<OZIN?N<GTL?(MS+JMK]HC%^^+K;$WBXPA?F&^E\D$%*O/U[/?(:OVWV*Z%`:K&V?X
  KURD@W^D)<OG?(VJEWLAM<$A);CQRI]*U#Q%
  <Y\&SA%#<V
  
  下面再仔細分析一下上面的程序我們發現其中的lowerbound和upperbound的數值其實就是你想使用來加密的ASCII字符范圍後面一篇文章中將介紹如何使用這個密鑰來加密和解密一個字符串
  
  在第一部分討論了如何生成密鑰下面將介紹如何使用這個密鑰來加密和解密一個字符串
  
  下面的代碼就是能夠同時實現這個功能的函數
  
  Cryptasp文件
  <%
  Dim g_Key
  Const g_CryptThis = Now is the time for
  all good men to come to the aid of their country
  Const g_KeyLocation = c:\keytxt
  
  g_Key = mid(ReadKeyFromFile(g_KeyLocation)Len(g_CryptThis))
  
  ResponseWrite <p>ORIGINAL STRING: & g_CryptThis & <p>
  ResponseWrite <p>KEY value: & g_Key & <p>
  ResponseWrite <p>ENCRYPTED CYPHERTEXT: & EnCrypt(g_CryptThis) & <p>
  ResponseWrite <p>DECRYPTED CYPHERTEXT: & DeCrypt(EnCrypt(g_CryptThis)) & <p>
  
  Function EnCrypt(strCryptThis)
  Dim strChar iKeyChar iStringChar I
  for I = to Len(strCryptThis)
  iKeyChar = Asc(mid(g_KeyI))
  iStringChar = Asc(mid(strCryptThisI))
   *** uncomment below to encrypt with addition
   iCryptChar = iStringChar + iKeyChar
  iCryptChar = iKeyChar Xor iStringChar
  strEncrypted = strEncrypted & Chr(iCryptChar)
  next
  EnCrypt = strEncrypted
  End Function
  
  Function DeCrypt(strEncrypted)
  Dim strChar iKeyChar iStringChar I
  for I = to Len(strEncrypted)
  iKeyChar = (Asc(mid(g_KeyI)))
  iStringChar = Asc(mid(strEncryptedI))
   *** uncomment below to decrypt with subtraction
   iDeCryptChar = iStringChar iKeyChar
  iDeCryptChar = iKeyChar Xor iStringChar
  strDecrypted = strDecrypted & Chr(iDeCryptChar)
  next
  DeCrypt = strDecrypted
  End Function
  
  Function ReadKeyFromFile(strFileName)
  Dim keyFile fso f
  set fso = ServerCreateObject(ScriptingFileSystemObject)
  set f = fsoGetFile(strFileName)
  set ts = fOpenAsTextStream( )
  
  Do While not tsAtEndOfStream
  keyFile = keyFile & tsReadLine
  Loop
  
  ReadKeyFromFile = keyFile
  End Function
  
  %>
  
  在Cryptasp中我們首先從密鑰文件中得到密鑰值然後從這段密鑰中截取和我們需要加密的明文同樣長度的密鑰然後使用一個簡單的異或操作將明文和密鑰進行運算那麼得到的結果就是加密後的密文了過程很簡單的由於是使用了異或操作所以解密將非常簡單只要使用同樣的密鑰對密文再次進行異或操作就能夠解密了在上面介紹的基礎上你可以少加改動就可以使用同樣的方法加密一個文件唯一需要注意的是對於一個二進制文件你需要做一些完整性檢查以保證轉換回來的字符不要越界現在你需要做的就是把密鑰保存在服務器上的一個安全的地方(不能夠被外部訪問)
From:http://tw.wingwit.com/Article/program/net/201311/12967.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.