我在Ruby中有加密和解密,并尝试用Go重写。我一步一步地尝试,所以从Ruby中的加密开始,并尝试在go中解密,这是有效的。但是当我尝试在Go中写入加密并在Ruby中解密时。当我尝试提取标签时,我遇到了困难,我解释了为什么我需要提取auth标签的原因
加密 在红宝石中
plaintext = "Foo bar"
cipher = OpenSSL::Cipher.new('aes-256-gcm')
cipher.encrypt
cipher.iv = iv # string 12 len
cipher.key = key # string 32 len
cipher.auth_data = # string 12 len
cipherText = cipher.update(JSON.generate({value: plaintext})) + cipher.final
authTag = cipher.auth_tag
hexString = (iv + cipherText + authTag).unpack('H*').first
我尝试连接一个初始向量,一个密文和身份验证标签,所以在解密之前,我可以提取它们,特别是身份验证标签,因为我需要在Ruby中调用Cipher#final之前设置它
auth_tag
必须在调用密码#解密,密码#key=和密码#iv=之后,但在调用密码#final之前设置标记。执行所有解密后,将在调用密码#final时自动验证标记
这是高浪中的函数加密
ciphertext := aesgcm.Seal(nil, []byte(iv), []byte(plaintext), []byte(authData))
src := iv + string(ciphertext) // + try to add authentication tag here
fmt.Printf(hex.EncodeToString([]byte(src)))
如何提取身份验证标签并将其与iv和密文连接起来,以便我可以在ruby中使用解密功能进行解密
raw_data = [hexString].pack('H*')
cipher_text = raw_data.slice(12, raw_data.length - 28)
auth_tag = raw_data.slice(raw_data.length - 16, 16)
cipher = OpenSSL::Cipher.new('aes-256-gcm').decrypt
cipher.iv = iv # string 12 len
cipher.key = key # string 32 len
cipher.auth_data = # string 12 len
cipher.auth_tag = auth_tag
JSON.parse(cipher.update(cipher_text) + cipher.final)
我希望能够在Go中进行加密,并尝试在Ruby中解密。
qq_遁去的一_1
蓝山帝景
海绵宝宝撒
随时随地看视频慕课网APP
相关分类