des是乙個經典的對稱加密演算法,但也缺陷明顯,即56位的金鑰安全性不足,已被證實可以在短時間內破解。為解決此問題,出現了3des,也稱triple des,3des為des向aes過渡的加密演算法,它使用3條56位的金鑰對資料進行三次加密。為了相容普通的des,3des並沒有直接使用 加密->加密->加密 的方式,而是採用了加密->解密->加密 的方式。
當三重金鑰均相同時,前兩步相互抵消,相當於僅實現了一次加密,因此可實現對普通des加密演算法的相容。
3des解密過程,與加密過程相反,即逆序使用金鑰。是以金鑰3、金鑰2、金鑰1的順序執行 解密->加密->解密。
相比des,3des因金鑰長度變長,安全性有所提高,但其處理速度不高。因此又出現了aes加密演算法,aes較於3des速度更快、安全性更高。
對比des,發現只是換了newtripledescipher。不過,需要注意的是,金鑰長度必須24byte,否則直接返回錯誤。
package main
import (
"crypto/des"
"bytes"
"crypto/cipher"
"fmt"
)//為最後一組填充資料
func paddingtext(src byte,blocksize int)byte,padding)
//將填充資料追加到原始資料
return newtext
}func unpaddingtext(src byte) byte
//使用des演算法對檔案進行加密
//src:需要被加密的明文
//key:秘鑰
func encryptdes(src,key byte)(byte,error)
length := block.blocksize()
//拼接資料
src = paddingtext(src,length)
//newcbcencrypter第二個引數是初始化向量,長度要求和塊大小一樣,內容隨意(需要和解密初始化向量相同)
//根據塊和向量建立cbc加密模式
blockmode := cipher.newcbcencrypter(block,key[:block.blocksize()])
//建立切片,用於儲存加密之後的密文
dest := make(byte,len(src))
//加密
blockmode.cryptblocks(dest,src)
return dest,nil
}//使用des演算法解密
//src:需要被解密的密文
//key:秘鑰,需要和加密時使用的秘鑰相同
func decryptdes(src,key byte)(byte,error)
//準備初始化向量
//建立解密模式
blockmode := cipher.newcbcdecrypter(block,key[:block.blocksize()])
//建立切片,用於儲存解密之後的明文
dest := make(byte,len(src))
//解密
blockmode.cryptblocks(dest,src)
newtext := unpaddingtext(dest)
return newtext,nil
}func main()
fmt.printf("%x\n",ciphertext)
plaintext,err := decryptdes(ciphertext,key)
if err != nil
fmt.println(string(plaintext))
}
3des演算法加密
實現的原理 public class encryption 執行3des加密 param secretkey 秘鑰 param datastring 明文 return base64編碼文字 public static string encryptdes string secretkey,strin...
Base64和3DES加密演算法原理
這篇文章是對base64和3des演算法以及他們如何在iphone平台上實現的一點總結。本文吸收了很多前人的資料和成果,在修正了其中的一些錯誤的基礎上新增了自己的理解。在此向前人出色的工作表示感謝。本文主要參考資料如下 base64加密演算法 base64是網路上最常見的用於傳輸8bit位元組 的編...
Des與3Des加密解密
des和3des演算法 public class des b ret.tostring return ret.tostring 3des加密 金鑰不能每8位重複,例如 123456781234567812345678,如果這樣則演算法退化為des,c 會檢測,不能使用 明文 金鑰 public st...