私はJava標準ライブラリを使いたいと思います。私が知っている限り、その関数の入力は限られています。そこで私はこの目的のために2つの方法を実装しました。ここで彼らは、次のとおりです。RSA暗号化とJavaでの長いメッセージの復号化
private byte[] RSAenc(String in) throws Exception {
Cipher c = Cipher.getInstance("RSA");
c.init(Cipher.ENCRYPT_MODE, privKey);
int l = in.length();
byte[] part;
byte[] result = new byte[(int)(64*java.lang.Math.ceil(l/20.0))];
int i = 0;
while(i*20+20<l) {
part = c.doFinal(in.substring(i*20,i*20+19).getBytes("UTF-8"));
System.arraycopy(part, 0, result, i*64, part.length);
i = i+1;
}
part = c.doFinal(in.substring(i*20,l-1).getBytes("UTF-8"));
System.arraycopy(part, 0, result, i*64, part.length);
return result;
}
private String RSAdec(byte [] in) throws Exception {
Cipher c = Cipher.getInstance("RSA");
c.init(Cipher.DECRYPT_MODE, privKey);
String result = "";
byte[] part = new byte[64];
int l = in.length;
int i = 0;
while(i+64<=l) {
System.arraycopy(in, i, part, 0, part.length);
result = result + new String(c.doFinal(part), "UTF-8");
i= i+64;
}
return result;
}
彼らはこのように働く:20のサイズのサブストリング、暗号化のために私は高々に文字列を分割し、それらを暗号化するために暗号を使用します。解読のために、私はバイト配列を64バイトブロックに分割し、暗号解読をそれらに適用する。 これを行う関数は既にありますか?あるいは、少なくとももっと清潔な解決策がありますか?私のアプローチはどれくらい安全ですか?暗号化結果の長さ(result.length
)は、JREのすべてのディストリビューションで常に64ですか?
ありがとう、
参照[RSAなどの非対称暗号化を使用して任意の長さの平文を暗号化するにはどうすればよいですか?](http://crypto.stackexchange.com/questions/14/how-can-i-use-asymmetric crypto.stackexchange.comで-s暗号化 - と同様にrsaから任意の長さの暗号化)。 –