日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Go语言的DES加密(CBC模式, ECB模式) ---- 与java加密互通(转)

發(fā)布時(shí)間:2025/4/14 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Go语言的DES加密(CBC模式, ECB模式) ---- 与java加密互通(转) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

問題場景:

業(yè)務(wù)需要對(duì)接接口, 采用DES加密方式加密, 于是google一下go的DES加密方式,
go的DES的默認(rèn)隱藏了ECB模式, 因?yàn)間o認(rèn)為ECB不安全, 所以不建議使用,就隱藏了,
然而接口卻需要采用ECB模式(吐槽寫文檔的人, 并沒有寫明使用了ECB模式,
這讓我耗費(fèi)了大量的時(shí)間來猜測他的加密模式)

ECB

  • 概念
    ECB(電子密本方式)就是將數(shù)據(jù)按照8個(gè)字節(jié)一段進(jìn)行DES加密或解密得到一段8個(gè)字節(jié)的密文或者明文,最后一段不足8個(gè)字節(jié),按照需求補(bǔ)足8個(gè)字節(jié)進(jìn)行計(jì)算,之后按照順序?qū)⒂?jì)算所得的數(shù)據(jù)連在一起即可,各段數(shù)據(jù)之間互不影響。
  • 特點(diǎn)
  • 簡單,有利于并行計(jì)算,誤差不會(huì)被傳送;
  • 不能隱藏明文的模式;在密文中出現(xiàn)明文消息的重復(fù)
  • 可能對(duì)明文進(jìn)行主動(dòng)攻擊;加密消息塊相互獨(dú)立成為被攻擊的弱點(diǎn)
  • CBC

    • 概念
      CBC(密文分組鏈接方式)有向量的概念, 它的實(shí)現(xiàn)機(jī)制使加密的各段數(shù)據(jù)之間有了聯(lián)系。
    • 加密步驟:
  • 首先將數(shù)據(jù)按照8個(gè)字節(jié)一組進(jìn)行分組得到D1D2......Dn(若數(shù)據(jù)不是8的整數(shù)倍,用指定的PADDING數(shù)據(jù)補(bǔ)位)
  • 第一組數(shù)據(jù)D1與初始化向量I異或后的結(jié)果進(jìn)行DES加密得到第一組密文C1(初始化向量I為全零)
  • 第二組數(shù)據(jù)D2與第一組的加密結(jié)果C1異或以后的結(jié)果進(jìn)行DES加密,得到第二組密文C2
  • 之后的數(shù)據(jù)以此類推,得到Cn
  • 按順序連為C1C2C3......Cn即為加密結(jié)果。
    • 解密是加密的逆過程:
  • 首先將數(shù)據(jù)按照8個(gè)字節(jié)一組進(jìn)行分組得到C1C2C3......Cn
  • 將第一組數(shù)據(jù)進(jìn)行解密后與初始化向量I進(jìn)行異或得到第一組明文D1(注意:一定是先解密再異或)
  • 將第二組數(shù)據(jù)C2進(jìn)行解密后與第一組密文數(shù)據(jù)進(jìn)行異或得到第二組數(shù)據(jù)D2
  • 之后依此類推,得到Dn
  • 按順序連為D1D2D3......Dn即為解密結(jié)果。
    • 特點(diǎn)
  • 不容易主動(dòng)攻擊,安全性好于ECB,適合傳輸長度長的報(bào)文,是SSL、IPSec的標(biāo)準(zhǔn)。
    每個(gè)密文塊依賴于所有的信息明文消息中一個(gè)改變會(huì)影響所有密文塊
  • 發(fā)送方和接收方都需要知道初始化向量
  • 加密過程是串行的,無法被并行化(在解密時(shí),從兩個(gè)鄰接的密文塊中即可得到一個(gè)平文塊。因此,解密過程可以被并行化。
  • 碼 //ECB加密 func EncryptDES_ECB(src, key string) string {data := []byte(src)keyByte := []byte(key)block, err := des.NewCipher(keyByte)if err != nil {panic(err) }bs := block.BlockSize()//對(duì)明文數(shù)據(jù)進(jìn)行補(bǔ)碼data = PKCS5Padding(data, bs)if len(data)%bs != 0 {panic("Need a multiple of the blocksize")}out := make([]byte, len(data))dst := outfor len(data) > 0 {//對(duì)明文按照blocksize進(jìn)行分塊加密//必要時(shí)可以使用go關(guān)鍵字進(jìn)行并行加密block.Encrypt(dst, data[:bs])data = data[bs:]dst = dst[bs:]}return fmt.Sprintf("%X", out) }//ECB解密 func DecryptDES_ECB(src, key string) string {data, err := hex.DecodeString(src)if err != nil {panic(err)}keyByte := []byte(key)block, err := des.NewCipher(keyByte)if err != nil {panic(err)}bs := block.BlockSize()if len(data)%bs != 0 {panic("crypto/cipher: input not full blocks")}out := make([]byte, len(data))dst := outfor len(data) > 0 {block.Decrypt(dst, data[:bs])data = data[bs:]dst = dst[bs:]}out = PKCS5UnPadding(out)return string(out) }//CBC加密 func EncryptDES_CBC(src, key string) string {data := []byte(src)keyByte := []byte(key)block, err := des.NewCipher(keyByte )if err != nil {panic(err)}data = PKCS5Padding(data , block.BlockSize())//獲取CBC加密模式iv := keyByte //用密鑰作為向量(不建議這樣使用)mode := cipher.NewCBCEncrypter(block, iv)out := make([]byte, len(data))mode .CryptBlocks(out, data)return fmt.Sprintf("%X", out) }//CBC解密 func DecryptDES_CBC(src, key string) string {keyByte := []byte(key)data, err := hex.DecodeString(src)if err != nil {panic(err)}block, err := des.NewCipher(keyByte)if err != nil {panic(err)}iv := keyByte //用密鑰作為向量(不建議這樣使用)mode := cipher.NewCBCDecrypter(block, iv)plaintext := make([]byte, len(data))mode.CryptBlocks(plaintext, data)plaintext = PKCS5UnPadding(plaintext)return string(plaintext) }//明文補(bǔ)碼算法 func PKCS5Padding(ciphertext []byte, blockSize int) []byte {padding := blockSize - len(ciphertext)%blockSizepadtext := bytes.Repeat([]byte{byte(padding)}, padding)return append(ciphertext, padtext...) } //明文減碼算法 func PKCS5UnPadding(origData []byte) []byte {length := len(origData)unpadding := int(origData[length-1])return origData[:(length - unpadding)] }

      

    轉(zhuǎn)自https://my.oschina.net/imhuayi/blog/1541840

    轉(zhuǎn)載于:https://www.cnblogs.com/leescre/p/10500808.html

    總結(jié)

    以上是生活随笔為你收集整理的Go语言的DES加密(CBC模式, ECB模式) ---- 与java加密互通(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲天堂2015| 国产手机在线视频 | 国产在线看一区 | 午夜亚洲| 国产精品熟女一区二区不卡 | 少妇按摩一区二区三区 | 超污巨黄的小短文 | 亚洲欧美日韩免费 | 欧美亚洲综合网 | 少妇系列av | 欧美爱爱网站 | 久久人妻少妇嫩草av无码专区 | 欧美巨鞭大战丰满少妇 | 亚洲永久免费网站 | 六月婷婷在线观看 | 草在线视频 | 日本欧美中文字幕 | 免费无遮挡网站 | 亚洲图片一区 | 国产黄色在线观看 | 999视频在线播放 | 91国内 | 和美女啪啪 | 五月婷影院 | 国产成人麻豆精品午夜在线 | 欧美在线激情 | 日本黄色大片在线观看 | 熟女精品一区二区三区 | 亚洲三页| 男女交性视频播放 | av不卡免费在线 | 免费国产小视频 | 黄色一级免费视频 | 国产丝袜第一页 | 中文精品一区 | 少妇裸体淫交视频免费看高清 | 亚洲AV不卡无码一区二区三区 | 欧美乱做爰xxxⅹ久久久 | 男女在楼梯上高潮做啪啪 | 午夜免费网址 | 伊人网色 | 污漫在线观看 | 一区精品二区国产 | 欧美黄色短片 | 国产专区一 | 毛片2| 国产精品乱码一区二区视频 | 91极品蜜桃臀 | 免费成人看视频 | 99久久久久久久久 | 久久久久久69 | 少妇高清精品毛片在线视频 | 成年人视频免费看 | 一级bbbbbbbbb毛片 | 中文有码一区 | 中文字幕乱码中文乱码777 | 国产乱码精品一区二区三区亚洲人 | 午夜av大片 | 亚洲黄色免费观看 | 日韩高清片 | 三级黄色网络 | 欧美xxxx黑人又粗又长密月 | 欧美成人午夜 | 哺乳援交吃奶在线播放 | 精品久久久久久无码国产 | 午夜激情在线观看视频 | 久久青草视频 | 神秘马戏团在线观看免费高清中文 | 天天噜天天干 | 国产亚洲91 | 国产精品制服丝袜 | 日韩欧美国产一区二区三区在线观看 | 精品久久免费 | 婷婷六月综合网 | 午夜成人影片 | 高清av网址 | 亚洲欧美激情另类 | 日韩视频在线观看一区二区 | 成人av无码一区二区三区 | 婷婷色视频| 亚洲天堂777 | 久久精品一区二区三区不卡牛牛 | 一级裸体视频 | 亚卅色图| 国产欧美日韩精品区一区二污污污 | 小泽玛利亚在线 | 天天爱天天干天天操 | 免费在线视频观看 | 日韩有码专区 | 被灌满精子的波多野结衣 | 丁香婷婷在线观看 | 日韩欧美国产综合 | 日本一区二区视频在线观看 | av网站免费看 | 久久一区二区三区四区五区 | 国语久久| 亚洲色偷精品一区二区三区 | 免费91网站 | 五月开心播播网 |