반응형
Algid 구문 분석 오류, 시퀀스가 아닙니다.
다음 방법을 사용하여 파일에서 RSA 개인 키를 읽으려고 할 때
public PrivateKey getPrivateKey()
throws NoSuchAlgorithmException,
InvalidKeySpecException, IOException {
final InputStream inputStream = getClass().getClassLoader()
.getResourceAsStream("privatekey");
byte[] privKeyBytes = null;
try {
privKeyBytes = IOUtils.toByteArray(inputStream);
} catch (final IOException exception) {
LOGGER.error("", exception);
IOUtils.closeQuietly(inputStream);
}
LOGGER.debug("privKeyBytes: {}", privKeyBytes);
String BEGIN = "-----BEGIN RSA PRIVATE KEY-----";
String END = "-----END RSA PRIVATE KEY-----";
String str = new String(privKeyBytes);
if (str.contains(BEGIN) && str.contains(END)) {
str = str.substring(BEGIN.length(), str.lastIndexOf(END));
}
KeyFactory fac = KeyFactory.getInstance("RSA");
EncodedKeySpec privKeySpec =
new PKCS8EncodedKeySpec(Base64.decode(str.getBytes()));
return fac.generatePrivate(privKeySpec);
}
예외는 인정합니다.
java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : algid parse error, not a sequence
at sun.security.rsa.RSAKeyFactory.engineGeneratePrivate(RSAKeyFactory.java:200) ~[na:1.6.0_23]
at java.security.KeyFactory.generatePrivate(KeyFactory.java:342) ~[na:1.6.0_23]
pac.generatePrivate(privKeySpec) 콜에서 사용됩니다.
이 오류는 무엇을 의미합니까?
감사해요.
드미트리
같은 문제가 발생했는데, 키의 형식이 실제 문제가 아니었습니다.
그 예외를 없애기 위해 제가 해야 할 일은
java.security.Security.addProvider(
new org.bouncycastle.jce.provider.BouncyCastleProvider()
);
모든 것이 잘 되었다
즉, 키가 PKCS#8 형식이 아님을 의미합니다.가장 쉬운 방법은,openssl pkcs8 -topk8 <...other options...>
명령어를 사용하여 키를 한 번 변환합니다.또는 Bouncycastle Lightweight API 클래스를 사용할 수 있습니다.
개인 키로 PCKS8 파일을 만들어야 합니다!
사적인.pem => 개인 키 파일 이름
openssl genrsa -out private.pem 1024
public_key.pem => 공개키 파일 이름
openssl rsa -in private.pem -pubout -outform PEM -out public_key.pem
private_key.pem => PCKS8 형식의 개인 키 이름!이 포맷은 java로 읽을 수 있습니다.
openssl pkcs8 -topk8 -inform PEM -in private.pem -out private_key.pem -nocrypt
언급URL : https://stackoverflow.com/questions/6559272/algid-parse-error-not-a-sequence
반응형
'source' 카테고리의 다른 글
Http ServletRequest가 JSON POST 데이터를 가져옵니다. (0) | 2022.10.14 |
---|---|
PHP에서 날짜를 타임스탬프로 변환하는 방법 (0) | 2022.10.14 |
Javascript에서 선택할 옵션 추가 (0) | 2022.10.13 |
UNIQURE 제약조건은 필드에 INDEX를 자동으로 생성합니까? (0) | 2022.10.13 |
Google Chrome에서 JavaScript 디버거를 시작하려면 어떻게 해야 합니까? (0) | 2022.10.13 |