[今日の学習]byte[]<>String符号化問題(feat.base 64)
パスワードのコーディング
Google tinkライブラリを使用すると、パスワード文は
JWTがbase 64符号化であることを毎日知っているので、どんな符号化方式なのか考えていなかったので、DBの修正の苦しみに報いるために探しました.
Base 64(Base 60)は、8ビットのバイナリデータ(例えば実行可能ファイルまたはZIPファイル)を、汎用ASCII領域のみの文字(文字コードの影響を受けない)の文字列のセットに変換する符号化方法である.
--ウィキペディア
名前のように64文字を表すことができます.2^6=64、すなわち6ビットで符号化される.3バイトのデータ(8*3)は最大33%増加し、最大4文字(6*4)は6ビットを使用するためです.固定サイズの符号化であるため、文字列のほか、画像などのバイトデータの符号化にも適している.
逆にUTF-8は、Unicode文字セットの文字を符号化する方法(バイナリ符号化)である.用途が違うから、次は混同しないでください.
Google tinkライブラリを使用すると、パスワード文は
byte[]
を返し、文字列を再取得するために復号されます.ただし、現在のプロジェクトのデータベースにパスワード文が格納されている部分はVARCHAR
です.変更するにはflywayスクリプトなどを作成してください.面倒なところが多い気がするしたがって、暗号文を文字列に変換して保存し、復号時に文字列をbyte[]
に変換して使用する.// 대충 이런 느낌
String plaintext;
byte[] cipher = encrypt(plaintext);
String cipherString = new String(cipher, "UTF-8");
byte[] maybeCipher = cipherString.getBytes(StandardCharsets.UTF_8)
byte[] decipher = decrypt(cipher);
String plaintext = new String(decipher, "UTF-8");
// cipher와 maybeCipher가 다름
しかし、上記のようにコードを記述し、復号に失敗した.デバッガから見ると、cipher
とmaybeCipher
の価格が違います.同じUTF-8符号化方式が指定されているので良いと思いますが、これはUTF-8では表現できない値のようです.UTF-8が可変長であることが原因と疑われている.だからbase 64方式を使用しました.よかった!// 대충 이런 느낌
String plaintext;
byte[] cipher = encrypt(plaintext);
String cipherString = Base64.getEncoder().encodeToString(cipher);
byte[] maybeCipher = Base64.getDecoder().decode(cipherString);
byte[] decipher = decrypt(cipher);
String plaintext = new String(decipher, "UTF-8");
// cipher와 maybeCipher가 동일함
Base64JWTがbase 64符号化であることを毎日知っているので、どんな符号化方式なのか考えていなかったので、DBの修正の苦しみに報いるために探しました.
Base 64(Base 60)は、8ビットのバイナリデータ(例えば実行可能ファイルまたはZIPファイル)を、汎用ASCII領域のみの文字(文字コードの影響を受けない)の文字列のセットに変換する符号化方法である.
--ウィキペディア
名前のように64文字を表すことができます.2^6=64、すなわち6ビットで符号化される.3バイトのデータ(8*3)は最大33%増加し、最大4文字(6*4)は6ビットを使用するためです.固定サイズの符号化であるため、文字列のほか、画像などのバイトデータの符号化にも適している.
逆にUTF-8は、Unicode文字セットの文字を符号化する方法(バイナリ符号化)である.用途が違うから、次は混同しないでください.
Reference
この問題について([今日の学習]byte[]<>String符号化問題(feat.base 64)), 我々は、より多くの情報をここで見つけました https://velog.io/@sangmin7648/오늘의-배움-byte-String-인코딩-문제-feat.-base64テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol