Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

文字列の扱いについて

現在任意の文字列をバイトに分けて、さらにStringに戻るという処理を行っています。

例えばこんな感じです。
//任意の文字列
String test= "aaaaabbbbbcccccddddeeeefffgggggg";
//バイトに分ける
byte[] by = new byte[test.length()/2];
try {
for (int i=0;i<testKey.length();i+=2) 
by[i/2] = (byte) Integer.parseInt(testKey.substring(i, i+2),16);
}
}
catch (NumberFormatException e) {
by=null;
}
//Stringに変換
String stAngokey = new String(by);

任意の文字列をまったく同じものを使用しても、サーバにより(JMにより?)Stringに変換した後の値が変わってしまいます。
new Stringの際に文字コードを指定しても違う値となってしまいます。

※用途としては暗号化のキーとして使用するのですが、
cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, sksSpec);でキー長の不正で落ちてしまいます。

まったく原因がわからず困っています。
ご存知の方いらっしゃいましたら、アドバイスの程よろしくお願いします。

3

回答

78898

閲覧

3件の回答

評価

0

えっと、やりたいことは
16進数表記のキーをバイト配列に変換して、
それを使って秘密鍵を作り、
さらにその秘密鍵で暗号化するって事?

だとしたら、バイト配列を文字列に変換する必要無いんじゃ…?
キー長の不正なら指定したアルゴリズムと、どんなキーを渡したかわからないとなんともいえないし。

文字列に関しては表示できない文字も混ざるから、マシン次第になるのはしょうがないんじゃないかな?

評価

0

ご回答ありがとうございます。

バイト→String→バイト・・・おっしゃるとおり、必要ないと思うのですが、なぜか仕様で・・・。

windowsで暗号化をした際は、new StringではSJISを指定し、getBytesでは何も文字コードを指定しないとうまくいったのですが、Linuxではなぜかキー不正に。

暗号化はAESを使用していますが、特に問題ないとは思うのですが。

もう少し調査してみます。

評価

0

「SJIS」が悪いのでは。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。