第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Golang 從 openpgp.js 解密 PGP

Golang 從 openpgp.js 解密 PGP

Go
動漫人物 2022-05-10 13:42:20
在 Golang 中需要對稱 PGP 解密的幫助,我一直在嘗試對 OpenPGP.js 上生成的加密十六進制運行對稱解密,不幸的是,在 Golang 中解密沒有成功。這是JS中的加密。const openpgp = require('openpgp')async function main() {  let options = {    message: openpgp.message.fromBinary(new Uint8Array([0x01, 0x01, 0x01])), // input as Message object    passwords: ['secret stuff'],                                             // multiple passwords possible    armor: false                                                             // don't ASCII armor (for Uint8Array output)  }  const cypher_text = await openpgp.encrypt(options)  const encrypted = cypher_text.message.packets.write()  console.log(Buffer.from(encrypted).toString('hex'))  options = {    message: await openpgp.message.read(encrypted), // parse encrypted bytes    passwords: ['secret stuff'],              // decrypt with password    format: 'binary'                          // output as Uint8Array  }  const decrypted = await openpgp.decrypt(options)  console.log(decrypted.data)}main()控制臺日志>>c32e040903088c4db97456263252e0ef4f42627301e0ba3323b141a9ebd0476e5fe848d3c2b6021c8c06581ae2d19f7cd23b011b4b3a68758cb6fb12287db2a9ab6fdfad97670ae995e4deb7ca313d0aa705d264850adefb20353b263fc32ff8dc571f6dce8b722ddbdf40a907Uint8Array [ 1, 1, 1 ]我的代碼基于以下 GIST https://gist.github.com/jyap808/8250124package mainimport (    "bytes"    "errors"    "io/ioutil"    "log"    "golang.org/x/crypto/openpgp/armor"    "golang.org/x/crypto/openpgp/packet"    "golang.org/x/crypto/openpgp")func main() {    password := []byte("secret stuff")    packetConfig := &packet.Config{        DefaultCipher: packet.CipherAES256,    }    cypherHex := []byte("c32e040903088c4db97456263252e0ef4f42627301e0ba3323b141a9ebd0476e5fe848d3c2b6021c8c06581ae2d19f7cd23b011b4b3a68758cb6fb12287db2a9ab6fdfad97670ae995e4deb7ca313d0aa705d264850adefb20353b263fc32ff8dc571f6dce8b722ddbdf40a907")    encbuf := bytes.NewBuffer(nil)    w, err := armor.Encode(encbuf, openpgp.SignatureType, nil)    if err != nil {        log.Fatal(err)    }
查看完整描述

1 回答

?
有只小跳蛙

TA貢獻1824條經(jīng)驗 獲得超8個贊

首先,您沒有解碼十六進制編碼的密文。使用encoding/hex包解碼數(shù)據(jù):


ct, err := hex.DecodeString(`c32e040903088c4db97456263252e0ef4f42627301e0ba3323b141a9ebd0476e5fe848d3c2b6021c8c06581ae2d19f7cd23b011b4b3a68758cb6fb12287db2a9ab6fdfad97670ae995e4deb7ca313d0aa705d264850adefb20353b263fc32ff8dc571f6dce8b722ddbdf40a907`)

if err != nil {

    log.Fatal(err)

}

下一個問題是您錯誤地創(chuàng)建了bytes.Buffer. 您沒有將數(shù)據(jù)放入緩沖區(qū),然后調(diào)用Read什么都不做的方法(并且您確實使用數(shù)據(jù)對其進行了初始化,Read無論如何都會在解密之前“讀取”所有數(shù)據(jù))。緩沖區(qū)可以使用數(shù)據(jù)初始化,或者使用Write方法填充——在這種情況下,您只需要一個io.Reader并且可以使用bytes.NewReader.


r := bytes.NewReader(ct)

最后,您現(xiàn)在有 30x01個字節(jié),您可以使用更好的格式更清楚地看到:


d, err := ioutil.ReadAll(md.UnverifiedBody)

if err != nil {

    log.Fatal(err)

}


fmt.Printf("%#v\n", d)

https://play.golang.org/p/Y3VqADQvEIH


查看完整回答
反對 回復(fù) 2022-05-10
  • 1 回答
  • 0 關(guān)注
  • 455 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號