3DES加密演算法

2021-09-01 02:18:25 字數 2060 閱讀 3936

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...