3 回答
TA貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個(gè)贊
最短的答案可能是:正如@GradyPlayer 所建議的,您使用密碼的方式有誤。您必須將其交給加密器,而不是將其應(yīng)用于所有字節(jié)。模式看起來像這樣:
ciphertext = make([]byte, len(plaintext))
cbc := cipher.NewCBCEncrypter(cipher, iv)
cbc.CryptBlocks(ciphertext, plaintext)
也就是說,在這里您仍然需要將初始化向量放在密文前面(至少這是通常放置它的地方,解密器可能希望它位于此處),您仍然需要考慮填充(如果你像我一樣使用 CBC)。
因此,雖然它沒有直接解決問題,但我認(rèn)為它會(huì)幫助您獲得更多代碼以更好地理解。這是我剛剛創(chuàng)建的要點(diǎn)。免責(zé)聲明:我主要是從其他地方組裝代碼片段。所以我只是把你在這里看到的碎片放在一起,并在路上獲得了一些理解。
TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個(gè)贊
TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊
根據(jù)以下評(píng)論進(jìn)行編輯(以便正確使用隨機(jī)數(shù)):
接受的答案,尤其是來自 Topaco 的評(píng)論,幫助我找到了這個(gè)解決方案,我在這里發(fā)布給可能遇到這個(gè)問題的任何人:
var key = make([]byte, 32)
func encryptToken(t token) string {
original := t.ID // ID is string member of token
var nonce = make([]byte, 12)
// read random bytes into nonce
_, err := rand.Read(nonce)
if err != nil {
log.Println("Error reading random bytes into nonce:", err)
}
block, err := aes.NewCipher(key)
if err != nil {
log.Println("Error creating cipher during encrypt:", err)
}
aesgcm, err := cipher.NewGCM(block)
if err != nil {
log.Println("Error creating GCM during encrypt:", err)
}
ciphertext := aesgcm.Seal(nil, nonce, []byte(original), nil)
// prepend the ciphertext with the nonce
out := append(nonce, ciphertext...)
return hex.EncodeToString(out)
}
func decryptToken(s string) string {
// read hex string describing nonce and ciphertext
enc, err := hex.DecodeString(s)
if err != nil {
log.Println("Error decoding string from hex:", err)
}
// separate ciphertext from nonce
nonce := enc[0:12]
ciphertext := enc[12:]
block, err := aes.NewCipher(key)
if err != nil {
log.Println("Error creating cipher during decrypt:", err)
}
aesgcm, err := cipher.NewGCM(block)
if err != nil {
log.Println("Error creating GCM during decrypt:", err)
}
original, err := aesgcm.Open(nil, nonce, ciphertext, nil)
if err != nil {
log.Println("Error decrypting to string:", err)
}
originalAsString := string(original)
return originalAsString
}
參考: https: //pkg.go.dev/crypto/cipher#example-NewGCM-Encrypt
- 3 回答
- 0 關(guān)注
- 242 瀏覽
添加回答
舉報(bào)
