des是以64位元的明文為乙個單位來進行加密,並生成64位元的密文。由於它每次只能處理特定長度的一塊資料,所以des屬於分組密碼演算法。cypto/des
包提供了有關des加密的功能。
由於分組密碼演算法只能加密固定長度的分組,所以當加密的明文超過分組密碼的長度時,就需要對分組密碼演算法進行迭代,而迭代的方法就稱為分組密碼的模式。模式主要有ecb(電子密碼本)、cbc(密碼分組鏈結模式)、ctr(計數器模式)、ofb(輸出反饋模式)、cfb(密碼反饋模式)五種。下面簡單介紹下前兩種:
1. ecb(electronic code book)是最簡單的方式,它將明文分組加密後的結果直接成為密文分組。
優缺點:模式操作簡單;明文中的重複內容將在密文中表現出來,特別對於影象資料和明文變化較少的資料;適於短報文的加密傳遞。
2. cbc(cipher block chaining)的原理是加密演算法的輸入是當前的明文分組和前一密文分組的異或,第乙個明文分組和乙個初始向量進行異或,這樣同乙個明文分組重複出現時會產生不同的密文分組。
特點:同乙個明文分組重複出現時產生不同的密文分組;加密函式的輸入是當前的明文分組和前乙個密文分組的異或;每個明文分組的加密函式的輸入與明文分組之間不再有固定的關係;適合加密長訊息。
在按8個位元組對des進行加密或解密時,如果最後一段位元組不足8位,就需要對資料進行補位。即使加密或解密的資料剛好是8的倍數時,也會再補8位。舉個栗子,如果末尾剛好出現1,這時你就無法判斷這個1是原來資料,還是經過補位得到的1。因此,可以再補8位進行標識。填充方式主要有以下幾種:pkcs7padding、pkcs5padding、zeropadding、iso10126、ansix923。
1. pkcs7padding和pkcs5padding的填充方式相同,填充位元組的值都等於填充位元組的個數。例如需要填充4個位元組,則填充的值為」4 4 4 4」。
2. zeropadding填充位元組的值都為0。
des的金鑰長度是64位元,但由於每隔7個位元會設定乙個用於錯誤檢測的位元,因此其實質金鑰長度為56位元。
上面模式中,例如cbc,再加密第乙個明文分組時,由於不存在「前乙個密文分組」,因此需要事先準備乙個長度為乙個分組的位元序列來代替「前乙個密文分組」,這個位元序列成為初始化向量,也稱偏移量,通常縮寫為iv。一般來說,每次加密時都會隨機產生乙個不同的位元序列來作為初始化向量。偏移量的長度必須和塊的大小相同。
加密後的位元組在顯示時可以進行hex和base64編碼,hex是十六進製制編碼,base64是一種基於64個可列印字元來標識二進位制資料的方法。
package main
import (
"bytes"
"crypto/des"
"crypto/cipher"
"fmt"
)//填充字串(末尾)
func paddingtext(str byte, blocksize int) byte , paddingcount)
return newpaddingstr
}//去掉字元(末尾)
func unpaddingtext(str byte) byte
//---------------des加密 解密--------------------
func encyptogdes(src, key byte) byte
func decrptogdes(src,keybyte) byte
//---------------des加密 解密--------------------
func encyptog3des(src, key byte) byte
func decrptog3des(src,keybyte) byte
func main()
DES加密解密
using system using system.drawing using system.collections using system.componentmodel using system.windows.forms using system.data using system.io us...
DES加密解密
加密類 date 2012 04 23 pm.public class encrypt private encrypt 建立加密類物件.public static encrypt createcryptoserviceprovider des加密.待加密字串.加密金鑰.8位 public strin...
DES加密解密
using system.data using system.configuration using system.web using system.web.security using system.web.ui using system.web.ui.webcontrols using syst...