Ruby base64编码打乱了密码加密
我需要通过套接字发送一个JSON格式的加密字符串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.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哦,伙计,你完全正确。两端变量管理不善导致了这种情况!谢谢你指出,我花了一整天才找到。