首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Go加密与使用相同密钥和iv的Ruby加密不同

Go加密与使用相同密钥和iv的Ruby加密不同
EN

Stack Overflow用户
提问于 2017-01-19 00:22:01
回答 1查看 481关注 0票数 2

我有以下Ruby代码:

代码语言:javascript
复制
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

我试着在戈朗复制。到目前为止,我的情况如下:

代码语言:javascript
复制
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))
}

然而,Go版本的结果是:

+S52HGbLV1xp+GnF0v8VNOqc5J2GY2+SqA==

J3AVfNG84bz2UuXcfre7LVjSbMpX9XBq6g==\n

为什么我会得到不同的结果?

谢谢,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-19 00:31:22

AES 256密码需要一个32字节的密钥。Ruby代码将键设置为由十六进制数字组成的64字节字符串。OpenSSL在使用之前将字符串截断为32个字节(在key代码中将key更改为'4768c01c4f598828ef80d9982d95f888',您将得到相同的输出)。

然而,Go代码在使用前对密钥进行十六进制解码,将64位十六进制数字转换为密钥所需的32个字节。

如果要更改Go代码,使其与Ruby结果匹配,则需要截断键并删除十六进制解码步骤:

代码语言:javascript
复制
key := []byte("4768c01c4f598828ef80d9982d95f888")

但是,我认为代码的Go版本中的键处理更好。如果要更改Ruby版本以匹配Go版本,可以在使用前对键进行十六进制解码:

代码语言:javascript
复制
key = [key].pack('H*')
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41731748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档