RSA 암호화 예외:java.security.InvalidKeyException: IOException: algid parse error, not a sequence, 처리 방법
RSA 암호화를 진행할 때 예외를 보고합니다:algid parse error, not a sequence.구체적인 오류 정보는 다음과 같습니다.
Exception in thread "main" java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : algid parse error, not a sequence
at sun.security.rsa.RSAKeyFactory.engineGeneratePrivate(RSAKeyFactory.java:217)
at java.security.KeyFactory.generatePrivate(KeyFactory.java:372)
at com.hashland.otc.common.util.coder.RSACoder.sign(RSACoder.java:42)
at com.hashland.otc.common.util.coder.RSACoder.main(RSACoder.java:306)
Caused by: java.security.InvalidKeyException: IOException : algid parse error, not a sequence
at sun.security.pkcs.PKCS8Key.decode(PKCS8Key.java:352)
at sun.security.pkcs.PKCS8Key.decode(PKCS8Key.java:357)
at sun.security.rsa.RSAPrivateCrtKeyImpl.(RSAPrivateCrtKeyImpl.java:91)
at sun.security.rsa.RSAPrivateCrtKeyImpl.newKey(RSAPrivateCrtKeyImpl.java:75)
at sun.security.rsa.RSAKeyFactory.generatePrivate(RSAKeyFactory.java:316)
at sun.security.rsa.RSAKeyFactory.engineGeneratePrivate(RSAKeyFactory.java:213)
... 3 more
2. 원인 분석
이 이상이 발생한 것은 키의 형식이 정확하지 않기 때문입니다. 키는 Pkcs8 형식이 아닙니다.일부 게시물은 이 줄의 코드를 넣으면 변환할 수 있다고 생각하지만, 사실은 아니다. 이것은 하나의 대상을 구성하는 것이고 변환하는 조작이 없기 때문에 안 된다.
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
3. 해결 방법은 두 가지가 있다
1. 개인 키를 Pkcs8 형식으로 변경
개인 키의 공급자가 수정할 수도 있고, 스스로 수정할 수도 있다.스스로 절차를 수정: Mac이나 linux 컴퓨터에서 열쇠 (private.pem) 가 있는 디렉터리에 들어가 다음 명령을 실행합니다.
openssl pkcs8 -topk8 -inform PEM -in private.key -outform pem -nocrypt -out pkcs8.pem
이것은 같은 등급 디렉터리에서 Pkcs8 형식의 새로운 개인 키를 생성합니다: Pkcs8.pem.
Pkcs8을 Pkcs1로 바꾸려면 다음 명령을 사용할 수 있습니다.
openssl pkcs8 -in pkcs8.pem -nocrypt -out pri_key.pem
2. 호출 전 코드 추가
java.security.Security.addProvider(
new org.bouncycastle.jce.provider.BouncyCastleProvider()
);
4. 총결산
개인적으로 개인 키 방식을 수정하는 것을 추천합니다. 어쨌든 이런 방식은 비교적 간단합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.