Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby base64编码打乱了密码加密_Ruby_Json_Openssl - Fatal编程技术网

Ruby base64编码打乱了密码加密

Ruby base64编码打乱了密码加密,ruby,json,openssl,Ruby,Json,Openssl,我需要通过套接字发送一个JSON格式的加密字符串 JSON.generate不喜欢这样,并抛出错误: `encode': "\xF7" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError) `final': wrong final block length (OpenSSL::Cipher::CipherError) 为了解决这个问题,我用Base64.encode对它进行了编码,另一方面用Base64.decode 但当

我需要通过套接字发送一个JSON格式的加密字符串

JSON.generate
不喜欢这样,并抛出错误:

`encode': "\xF7" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)
`final': wrong final block length (OpenSSL::Cipher::CipherError)
为了解决这个问题,我用
Base64.encode
对它进行了编码,另一方面用
Base64.decode

但当我用密码解密它时,我得到了一个错误:

`encode': "\xF7" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)
`final': wrong final block length (OpenSSL::Cipher::CipherError)
我写了一个简短的测试来证明是Base64把事情搞糟了:

decipher = OpenSSL::Cipher.new("des-ede3")
decipher.decrypt
decipher.key = symkey

test = Base64.encode64(encrypted_json)
test2 = Base64.decode64(test)

puts test2 == encrypted_json #Prints true

decrypted_json = decipher.update(test) + decipher.final

puts
puts "JSON: #{decrypted_json}"
此代码在
decrypted_json=decipher.update(test)+decipher.final处抛出相同的错误

加密的_json
由使用相同密钥的密码加密

有人知道出了什么问题吗?或者如何生成JSON而不必将其编码到Base64

编辑:这是我的JSON生成器

ready_to_send = JSON.generate({
   enc_json: Base64.encode64(encrypted_json),
   symkey: Base64.encode64(encrypted_sym_key)
})

测试显示您正在尝试解密base64编码的加密数据。这显然行不通,您需要先对base64进行解码(以获取加密的二进制数据),然后对其进行解密。你是不是在收货端把订单搞错了?(它应该类似于加密→ base64编码→ 作为JSON传输→ base64解码→ 解密。)@matt哦,伙计,你完全正确。两端变量管理不善导致了这种情况!谢谢你指出,我花了一整天才找到。