Android에서 BouncyCastle API를 사용하여 문자열을 암호화하여 서버로 보내려고합니다.Android에서 Java BouncyCastle API를 사용하여 RSA 평문 키로 문자열을 암호화하는 방법
나는 공개 키를 파일 시스템이 아니라 메모리에두고있다. 나는이 평문 공개 키를 사용하여 RSA에 문자열을 암호화해야한다. 암호화 된 문자열.
public class RSAEncryptor {
//Get certificate from base64 string
public static X509Certificate getCertificateFromBase64String(String string)
throws CertificateException, javax.security.cert.CertificateException
{
if(string.equals("") || string == null) {
return null;
}
byte[] certBytes = Base64.decode(string.getBytes(), Base64.DEFAULT);
X509Certificate cert = X509Certificate.getInstance(certBytes);
return cert;
}
//Get public key from base64 encoded string
public static PublicKey getPublicKeyFromEncodedCertData(String encodedCertData)
throws CertificateException, javax.security.cert.CertificateException
{
if(encodedCertData == null || encodedCertData.equals("")) return null;
X509Certificate cert = getCertificateFromBase64String(encodedCertData);
if(cert == null) return null;
return cert.getPublicKey();
}
public static String rsaEncrypt(String plainText, String keyFromResources)
throws NoSuchAlgorithmException, InvalidKeySpecException,
IOException, NoSuchPaddingException, InvalidKeyException,
IllegalBlockSizeException, BadPaddingException //
{
if(plainText == null || plainText.equals("")) return null;
if(keyFromResources == null || keyFromResources.equals("")) return null;
byte[] encryptedBytes;
Cipher cipher = Cipher.getInstance("RSA");
PublicKey publicKey = null;
try {
publicKey = getPublicKeyFromEncodedCertData(keyFromResources);
}
catch(Exception ex) {
Logger.LogError("getPublicKeyFromEncodedCertData()", ex);
}
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
encryptedBytes = cipher.doFinal(plainText.getBytes());
String encrypted = new String(encryptedBytes);
return encrypted;
}
} 나는 현재하고, 다시 밖으로 같은 단지 왜곡 엉망 적절하게 암호화 된 문자열을받지 못했습니다
:
��RB��%����I��Q��F*�bd[@�y�_H]T{KƾuTN�Q� ��U�f��]�S �q|.t�t�9�Rˇ�����)��{�},ޱ�ª�ǥ#���@k=�WO���f�7t"yP�z�
을
이
내 클래스 (<?>
의 문자가 null입니다.)
2+tSXez8JrAIX+VJ2Dy4IsA56XhWpTwF8X2yGGaI6novucXknwykDyqJZICpmYcqx75qBRgxwrW2kY9LmQR2xU17PLqTukAu2Bna8WXYTmJJQ7CWsN3SdABlETRfsYA+g3A2rO2Qp6aR9OCBcFVJpnZJjb9kaOUj5Pcj0tNPFdM=
(실제 응답에서 분명히 변화 : D) 내가 어떤 도움을 주셔서 감사합니다 것
나는이 비슷한 영숫자 문자열을 다시 받고해야한다!
감사합니다.
이전에이 작업을 수행 한 사람이 있습니까? 이 문제를 해결하는 방법에 대한 제안이 있으면 좋겠습니다. 코드에서
공개 키는 공개 키이기 때문에 공개 키라고합니다. 파일 시스템이나 New York Times의 첫 페이지에 자유롭게 놓으십시오. –