Android에서 비대칭 공개/개인 키 암호화를 사용하여 메시지를 필사적으로 암호화하려고합니다.공개 키를 사용하는 InvalidKeySpecException
저는 Windows에 있는데 puttygen을 사용하여 공개 키와 개인 키를 생성했습니다. 어떤 차이가 있는지 모르겠지만 SSH-2 RSA를 선택했습니다. 공개 키는 다음과 같습니다.
AAAAB3NzaC1yc2EAAAABJQAAAQEAh63orUzl0UTd7jj0KNYJg1+kNnty0QHyJu0r
Cajf5Kl7qWJaGXPfwsG8Qt3teafs5sv0JBSinab0s/5wfQmd1QPpXTMP93Wc4ucp
1VC/9B2o8XVi4fKoGTehB48yrSfI6KF2AIeASM1jUswydKxsuS4AS2mLGV/HuoKD
huMfCsRc8qK5zGQfVCoZTbQ66Z1yKdAzxMUuGmiTp7pVsle/P/UGbm6yFiee5r1/
dOR2CDyR6CP09Jaj7KSGfGuwPryCXPjEce1oCbN/FlLHVb7T1B5f6xhq+oY+Ij13
1IZPfShV8cs2kYKjsle2s23V5urSdWFv2tEcSJcpkUm2FlPdQw==
본인을 기본/자산 폴더의 텍스트 파일에 복사했습니다. 그래서 같이 이것을 판독 :
InputStream input = context.getAssets().open(filename);
이 후 상당히있는 ByteArrayOutputStream 표준 방법을 통해 바이트 배열에 판독된다.
그때 시도하고 같은 공개 키에 그 변환 :
public static PublicKey getPublicKey(byte[] keyBytes){
PublicKey publicKey = null;
if(keyBytes != null) {
X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);
KeyFactory kf = null;
try {
kf = KeyFactory.getInstance("RSA");
publicKey = kf.generatePublic(spec);
} catch (NoSuchAlgorithmException e) {
Log.e(TAG, "NoSuchAlgorithmException");
e.printStackTrace();
} catch (InvalidKeySpecException e) {
Log.e(TAG, "InvalidKeySpecException " + e.getMessage());
e.printStackTrace();
}
}
return publicKey;
}
문제는 내가이 오류가 계속입니다 :
InvalidKeySpecException java.lang.RuntimeException: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
나는 시간이 공격 봤는데, 그리고 수 주위를 둘러 보지 않는 것 같습니다. 제발 제안을 환영하십시오. 차이가 없습니다
byte[] tempNewKey = Base64.decode(keyBytes, Base64.DEFAULT);
을하고 또한
RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(new BigInteger(module), new BigInteger(exponent));
그러나 퍼티 나에게 지수에 대해 아무것도 말하지 않는 사용하여 시도했다 :
나는 같은 Base64로 시도했습니다? 이 방법을 계속 사용하면 같은 오류가 발생하지 않지만 개인 키를 사용하여 암호를 해독하려고하면 횡설수설합니다.
정말 도움이되기를 바랍니다. 많은 감사합니다
SSH 키를 사용해야합니까? SSH 키는 X509로 인코딩되어 있지 않으므로 SSH 호환 라이브러리를 사용하지 않는 것이 좋습니다. 영원히 노력하고 ... 당신은 자바 자체에서 키를 생성 할 수도 있고 아니면 OpenSSL DER 인코딩을 사용할 수도 있습니다 열쇠. –
안녕 Maarten, 도와 줘서 고마워. 아니, SSH를 사용할 필요가 없으며 모든 개인/공개 키가 수행합니다. keytool -genkey 등을 사용하여 키를 만들려고했는데 작동하는 것처럼 보였지만 내 코드의 오류는 여전히 동일합니까? – James
다소 일반적인 예외입니다. 더 많은 정보가 없으면 * 이번에는 오류의 원인이 무엇인지 알기가 어렵습니다. 잠깐,이 질문에 답하고 새 질문을 할 수 있습니다. 그렇지 않으면 질문이 구체적이지 않을 것입니다. –