私は、次のRubyのコードがあります。ゴー暗号化は、同じキーを使用してRubyの暗号化とは異なりIV
require 'base64'
require 'openssl'
data = '503666666'
key = '4768c01c4f598828ef80d9982d95f888fb952c5b12189c002123e87f751e3e82'
nonce = '4eFi6Q3PX1478767\n'
nonce = Base64.decode64(nonce)
c = OpenSSL::Cipher.new('aes-256-gcm')
c.encrypt
c.key = key
c.iv = nonce
result = c.update(data) + c.final
tag = c.auth_tag
puts Base64.encode64(result + tag) # => J3AVfNG84bz2UuXcfre7LVjSbMpX9XBq6g==\n
私はGolangに複製しようとしています。 は、ここで私がこれまで持っているものです。
package main
import (
"fmt"
"crypto/aes"
"crypto/cipher"
"encoding/base64"
"encoding/hex"
)
func main() {
data := []byte("503666666")
key, err := hex.DecodeString(`4768c01c4f598828ef80d9982d95f888fb952c5b12189c002123e87f751e3e82`)
if err != nil {
panic(err)
}
nonceB64 := "4eFi6Q3PX1478767\n"
nonce, err := base64.StdEncoding.DecodeString(nonceB64)
if err != nil {
panic(err)
}
block, err := aes.NewCipher(key)
if err != nil {
panic(err.Error())
}
aesgcm, err := cipher.NewGCM(block)
if err != nil {
panic(err.Error())
}
ciphertext := aesgcm.Seal(nil, nonce, data, nil)
fmt.Printf("%s\n", base64.StdEncoding.EncodeToString(ciphertext))
}
囲碁バージョンから結果があるしかし:
+ S52HGbLV1xp + GnF0v8VNOqc5J2GY2 + SQAの==
対
J3AVfNG84bz2UuXcfre7LVjSbMpX9XBq6g == \ nは
は、なぜ私は別の結果を取得していますか?
ありがとう、
私はそれを認識しています。しかし、私はRubyから得た結果と全く同じ結果を得ようとしています。それが起こるためには、キーはGOでどのように変わるべきですか?私は進エンコードされない場合、キーの長さが大きすぎるため – content01
が、それは失敗します。 – content01
@ content01私は自分の答えを更新しました。 –