【发布时间】:2015-02-03 04:56:25
【问题描述】:
我正在 Rails 中构建一个 API,它使用 RSA 解密其中一个 POST 参数。当在 ruby 内部测试加密和解密时,如下所示,加密的字符串文字(似乎是 UTF8 编码的)在解密后不会以 UTF-8 出现。为什么是 ASCII-8BIT?处理此问题的推荐方法是什么?我应该对解密的字符串调用 force_encoding("UTF-8") 并在 API 规范中说所有字符串在加密之前都应该是 UTF8 吗?
@rsa = OpenSSL::PKey::RSA.new(1024)
original = "hej på dig\n"
puts original.encoding.name # => "UTF-8"
ciphertext = @rsa.public_encrypt(original)
decrypted = @rsa.private_decrypt(ciphertext)
puts decrypted.encoding.name # => "ASCII-8BIT"
assert_equal original, decrypted
#expected: hej på dig
#actual: hej p\xC3\xA5 dig
我在 OSX Yosemite 上使用 Ruby 2.1.3 和 Rails 4.1.5。
【问题讨论】:
标签: ruby-on-rails ruby openssl rsa