はじめに
現在、ciptherで暗号化したものを、byte型配列をSTringの文字列に変換しています。
##現状
String型に変換したのちに表示させると、文字化けが起きています。
コード
java
1javax.crypto.spec.SecretKeySpec sksSpec = 2 new javax.crypto.spec.SecretKeySpec(key.getBytes(), "Blowfish"); 3 javax.crypto.Cipher cipher = 4 javax.crypto.Cipher.getInstance("Blowfish"); 5 cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, sksSpec); 6 7 byte[] Encrypted = cipher.doFinal(password.getBytes()); 8 String encrypted = new String(Encrypted); 9 10 System.out.println(encrypted); 11 return encrypted;
##試したこと
getBytes()の部分の()の中を
SJISやUTF8、UTF16に直しましたが、変わらずSystem.out.printlnで文字化けになりました。
文字化け結果
byteの中を一つづつ表示させた結果と、
String型に変換させたものです。
また、keyの部分に、"0xef"
と入れています。これが文字化けと関係しているのでしょうか。
どういうふうに文字化けするんでしょう。
スクリーンショットなど提示できないでしょうか
ただいま情報追加いたします!
ご連絡ありがとうございます。
文字化けも何も、文字列passwordを暗号化した結果のバイト列(byte[] Encrypted)なので、それをそのままStringの文字列にしようとしても文字エンコードは関係ないので、化けたように見えても仕方が無いはずです。
暗号化したら、アルファベットや数字で表されると考えているのですが、
これが暗号化した結果ということでしょうか
> 暗号化したら、アルファベットや数字で表されると考えているのですが、
誤解があるのかもしれませんが、(暗号化の方式にもよるでしょうが)暗号化すると、文字というよりは1バイト0x00~0xffの値の範囲のバイト列になることが多いです。Browfishもそうだった気がします。文字(ASCII文字)としてのアルファベットや数字とは見た目の話なので、扱いが違います。
なるほど、
では、そもそもアルファベットや数字のようなきれいな暗号結果になるということはないということですかね?
只今、コマンドプロンプトで暗号化されたものをアップいたしました。
これは文字化けではなく、ただ0xefで指定した結果で暗号化ができているという認識でよろしいでしょうか。
> では、そもそもアルファベットや数字のようなきれいな暗号結果になるということはないということですかね?
ASCII文字のアルファベットや数字ではない、と言う意味ならばそうです。
> これは文字化けではなく、ただ0xefで指定した結果で暗号化ができているという認識でよろしいでしょうか。
正しい意図通りの暗号化ができているかは分かりません。安易に試すには、暗号化した値を復号化し、元の文字列になるかどうか確認してみてください。それがOK(暗号化できている)であれば、暗号化したバイト列をどう扱うのか、つまり16進数ダンプした値で表示するのか、バイナリの値のままどうこうするか、とか言う話になるかと思います。
回答1件
あなたの回答
tips
プレビュー