자바 표준 라이브러리를 사용하고 싶습니다. 알고있는 것만 큼 기능 입력이 제한됩니다. 그래서이 목적을 위해 두 가지 방법을 구현했습니다. 여기에 그들이있다 :RSA 암호화 및 긴 메시지의 암호 해독
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에서 rsa-to-encrypt-any-any-length와 같은 -encryption-such as)를 사용하십시오. –