質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

2826閲覧

byte型配列からStringの文字列に変換したときに、文字化けが治らない

unity3dbigginer

総合スコア65

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2020/06/22 06:21

編集2020/06/22 07:14

はじめに

現在、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"
と入れています。これが文字化けと関係しているのでしょうか。

イメージ説明

コマンドプロンプトで見た結果
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/06/22 06:30

どういうふうに文字化けするんでしょう。 スクリーンショットなど提示できないでしょうか
unity3dbigginer

2020/06/22 06:38

ただいま情報追加いたします! ご連絡ありがとうございます。
dodox86

2020/06/22 06:55

文字化けも何も、文字列passwordを暗号化した結果のバイト列(byte[] Encrypted)なので、それをそのままStringの文字列にしようとしても文字エンコードは関係ないので、化けたように見えても仕方が無いはずです。
unity3dbigginer

2020/06/22 07:02

暗号化したら、アルファベットや数字で表されると考えているのですが、 これが暗号化した結果ということでしょうか
dodox86

2020/06/22 07:11

> 暗号化したら、アルファベットや数字で表されると考えているのですが、 誤解があるのかもしれませんが、(暗号化の方式にもよるでしょうが)暗号化すると、文字というよりは1バイト0x00~0xffの値の範囲のバイト列になることが多いです。Browfishもそうだった気がします。文字(ASCII文字)としてのアルファベットや数字とは見た目の話なので、扱いが違います。
unity3dbigginer

2020/06/22 07:16

なるほど、 では、そもそもアルファベットや数字のようなきれいな暗号結果になるということはないということですかね? 只今、コマンドプロンプトで暗号化されたものをアップいたしました。 これは文字化けではなく、ただ0xefで指定した結果で暗号化ができているという認識でよろしいでしょうか。
dodox86

2020/06/22 07:23

> では、そもそもアルファベットや数字のようなきれいな暗号結果になるということはないということですかね? ASCII文字のアルファベットや数字ではない、と言う意味ならばそうです。 > これは文字化けではなく、ただ0xefで指定した結果で暗号化ができているという認識でよろしいでしょうか。 正しい意図通りの暗号化ができているかは分かりません。安易に試すには、暗号化した値を復号化し、元の文字列になるかどうか確認してみてください。それがOK(暗号化できている)であれば、暗号化したバイト列をどう扱うのか、つまり16進数ダンプした値で表示するのか、バイナリの値のままどうこうするか、とか言う話になるかと思います。
guest

回答1

0

自己解決

とりあえず、暗号化したものを複合して正しく中身の表示確認できたのでOKです。

投稿2023/02/08 08:44

unity3dbigginer

総合スコア65

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問