簡體   English   中英

ruby OpenSSL RSA 字符編碼

[英]ruby OpenSSL RSA character encoding

我正在 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 和 Rails 4.1.5 上使用 Ruby 2.1.3。

是的,你明白了。 您應該在加密之前明確地將 UTF-8 轉換為字節,並在解密之后再次返回。 底層庫只處理無符號字符,它們是 C 的字節等價物。

如果我正確閱讀了 Ruby API,您應該可以使用以下方法執行此操作:

string.force_encoding(Encoding::UTF_8)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM