PHP的openssl_encrypt转Ruby实现结果不一致问题排查
问题原因与解决方法
问题出在输出编码格式不一致:
- PHP的
openssl_encrypt函数默认会将加密后的二进制数据自动进行Base64编码,最终输出Base64格式的字符串。 - Ruby代码直接输出的是加密后的原始二进制数据,未做Base64编码,
puts输出时会将不可打印字符转义为十六进制形式。
修正后的Ruby代码
require 'base64' cipher = OpenSSL::Cipher.new('AES-256-CBC').encrypt cipher.iv = '0' * 16 cipher.key = '0' * 32 encrypted = cipher.update('Hello') + cipher.final # 对加密后的二进制数据做Base64编码 puts Base64.strict_encode64(encrypted) # 输出: lfbW8JcPq6dkEnmY0hG7Vw==
验证说明
修正后,Ruby代码通过Base64.strict_encode64方法将加密得到的二进制数据编码为标准Base64字符串,输出结果与PHP完全一致。
内容的提问来源于stack exchange,提问作者Cyril
相关产品推荐
相关产品推荐

