내 응용 프로그램에서 공용/개인 키 쌍을 생성하고 디스크에 나중에 사용하기 위해 저장합니다. 개인 키를로드하고 다시 초기화하면 제대로 작동하지만 개인 키의 경우 알 수없는 KeySpec 유형이 있습니다. java.security.spec.PKCS8EncodedKeySpec - 이유를 모르겠습니다.파일에서 공개 키 데이터로드
이KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(4096);
KeyPair keyPair = kpg.generateKeyPair();
privKey =keyPair.getPrivate();
pubKey =keyPair.getPublic();
DataOutputStream out=new DataOutputStream(ctx.openFileOutput(PRIVKEY_FILE,Context.MODE_PRIVATE));
byte[] data=privKey.getEncoded();
out.write(data);
out.close();
DataOutputStream out=new DataOutputStream(ctx.openFileOutput(PUBKEY_FILE,Context.MODE_PRIVATE));
byte[] data=pubKey.getEncoded();
out.write(data);
out.close();
개인 키의 다음로드가 잘 작동 :
DataInputStream in=new DataInputStream(ctx.openFileInput(PRIVKEY_FILE));
byte[] data=new byte[in.available()];
in.readFully(data);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(data);
KeyFactory kf = KeyFactory.getInstance("RSA");
privKey = kf.generatePrivate(keySpec);
decryptCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
decryptCipher.init(Cipher.DECRYPT_MODE, privKey);
유사 코드 내가 키 (쉬울 단순화 조금 읽을 수있는 코드)를 생성하고 저장하는 방법은
공개 키가 비참하게 실패합니다.
DataInputStream in=new DataInputStream(ctx.openFileInput(PUBKEY_FILE));
byte[] data=new byte[in.available()];
in.readFully(data);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(data);
KeyFactory kf = KeyFactory.getInstance("RSA");
pubKey = kf.generatePublic(keySpec); --> here the exception is thrown
encryptCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
encryptCipher.init(Cipher.ENCRYPT_MODE, pubKey);
그래서 내가 뭘 잘못하고 있니? 디스크에서 공개 키 데이터를로드하는 올바른 방법은 무엇입니까?
감사합니다.