Wie zum verschlüsseln von Daten in eine UTF-8-string mit OpenSSL::Cipher?
In eine Rails 3.0 (Ruby 1.9.2) app ich versuche, verschlüsselt Daten mit so etwas wie dieses:
cipher = OpenSSL::Cipher.new 'aes-256-cbc'
cipher.encrypt
cipher.key = cipher.random_key
cipher.iv = cipher.random_iv
encrypted = cipher.update 'most secret data in the world'
encrypted << cipher.final
Werden, die in einer UTF-8 Datenbank. Mein problem ist, dass
> encrypted.encoding
=> #<Encoding:ASCII-8BIT>
> encrypted.encode 'utf-8'
Encoding::UndefinedConversionError: "\xF7" from ASCII-8BIT to UTF-8
Wie bekomme ich eine UTF-8 verschlüsselte Zeichenfolge?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Lösung ist die Umwandlung von ASCII-8BIT-string zu Base64 und dann encode in UTF-8.
Einmal beibehalten, und aus der Datenbank abgerufen werden,
und schließlich entschlüsseln.
PS: Wenn du neugierig bist:
» encoded = Base64.encode64('Tromsø').encode('utf-8') => "VHJvbXPDuA==\n" » Base64.decode64(encoded.encode('ascii-8bit')) => "Troms\xC3\xB8"
Ich glaube, Ihre beste Wette ist, um zu verwenden
force_encoding
gefunden hier..encode
aus ASCII-8-BIT UTF-8 scheitert, so.force_encoding
wird, generieren Sie einfach eine ungültige byte-Reihenfolge.