를 디코딩하는 방법 다음은 내 요구 사항입니다 :자바 - Base64로 인코딩 된 인증서
- 프로그램은 3 개 태그를 입력으로 XML 파일을해야합니다 :합니다. 이 모든 데이터는 Base64로 인코딩됩니다. 참고 : 프로그램
- 프로그램을 디코딩하고 Base64로 디코딩 및 다른 파일 아래
에 기록해야한다
검증 데이터를 서명 및 인증서를 사용하여 인증에 대한 데이터를 확인해야 BC 단지를 사용하고
public void executeTask(InputStream arg0, OutputStream arg1) throws SomeException{
try{
BufferedReader br = null;
br = new BufferedReader(new InputStreamReader(arg0));
String orgContent = "", splitData = "", signContent = "", certContent = "";
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc = docBuilder.parse(arg0);
doc.getDocumentElement().normalize();
NodeList originalContent = doc.getElementsByTagName("OrgContent");
Element originalElement = (Element)originalContent.item(0);
NodeList textOrgContent = originalElement.getChildNodes();
orgContent = ((Node)textOrgContent.item(0)).getNodeValue().trim();
NodeList signature = doc.getElementsByTagName("Signature");
Element signatureElement = (Element)signature.item(0);
NodeList signatureContent = signatureElement.getChildNodes();
signContent = ((Node)signatureContent.item(0)).getNodeValue().trim();
NodeList certificate = doc.getElementsByTagName("Certificate");
Element certificateElement = (Element)certificate.item(0);
NodeList certificateContent = certificateElement.getChildNodes();
certContent = ((Node)certificateContent.item(0)).getNodeValue().trim();
String decodedCertContent = new String(Base64.decode(certContent),StandardCharsets.UTF_8);
byte[] certByteValue = Base64.decode(certContent);
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
System.out.println("certContent:\n" + new String(certByteValue,StandardCharsets.UTF_8));
InputStream inputStream = new ByteArrayInputStream(Base64.decode(certContent));
X509Certificate cert = (X509Certificate)certFactory.generateCertificate(inputStream);
arg1.write(decodedOrgData.getBytes());
arg1.flush();
}
catch (ParserConfigurationException e){
e.printStackTrace();
}
catch (IOException e){
e.printStackTrace();
}
catch (org.xml.sax.SAXException e){
e.printStackTrace();
}
catch (CertificateException e){
e.printStackTrace();
}
}
,536,913,632 : 인증서를 해독하려고 내 코드입니다 10새 문자열 (certByteValue, StandardCharsets.UTF_8)의 값을 인쇄하면 인식 할 수없는 텍스트가 인쇄되고 있습니다. 코드 X509Certificate cert = (X509Certificate)certFactory.generateCertificate(inputStream);
의 마지막 줄을 실행할 때 java.security.cert.CertificateException이 발생합니다 : 인증서를 파싱 할 수 없습니다 : java.io.IOException : BER/DER 데이터가 잘못되었습니다 (너무 큰 경우).
저는이 인증서에 대한 신참이기 때문에 교착 상태에 빠졌습니다. 나는 그 요구 사항을 진행할 수 없다. 위의 요구 사항을 달성하는 방법을 알고 싶습니다.
위의 코드에 대한 입력 스트림은 xml 파일입니다. 또 다른 프로그램은 서명과 인증서가있는 base64로 인코딩 된 데이터가있는 xml 파일을 만듭니다. 이 프로그램에서, 상기 증명서를 인코딩하기위한 아래의 코드가 사용된다 : 가변 encodedStringCert는 태그 안에 인증 값으로 전달된다
KeyStore keyStore = KeyStore.getInstance("JKS");
keyStore.load(new FileInputStream("Filepath/certificate.p12"), "password".toCharArray());
PrivateKey privateKey = (PrivateKey)keyStore.getKey(alias, "password".toCharArray());
CertificateFactory factory = CertificateFactory.getInstance("X.509");
X509Certificate certificate = (X509Certificate) factory.generateCertificate(new FileInputStream("D:/Sujai/Implementation Team/PI/Axis Treds/Certificates/PI_7.5_Cert/Arteria_Certificate-cert.cert"));
byte[] encodedCert = certificate.getEncoded();
String encodedStringCert = new String(Base64.encode(new String(encodedCert).getBytes(StandardCharsets.UTF_8)));
. 이 질문 맨 위에 공유되는 프로그램에서이 인증서 값을 디코딩해야합니다.
샘플 인증서 내용 : ----- BEGIN CERTIFICATE ----- MIIDBjCCAe6 .... IM1g == ----- END의 CERTIFICATE -----
이 태그가 있습니다. 좀 더 확장적 일 것입니다 : \t 다음은 코드에서 얻는 입력을 생성하는 코드입니다. encodedStringCert string은 내 프로그램을위한 입력입니다 :'code'CertificateFactory factory = CertificateFactory.getInstance ("X.509"); \t X509 인증서 인증서 = (X509Certificate) factory.generateCertificate (새 FileInputStream ("FilePath/cert.cert"))); \t \t 바이트 [] encodedCert = certificate.getEncoded(); \t \t 문자열 encodedStringCert = 새 문자열 (Base64.encode (새 문자열 (encodedCert) .getBytes (StandardCharsets.UTF_8))); 코드; – Sujaikareik
위의 잘못된 형식은 죄송합니다. 내가 새로 왔기 때문에 여기서 형식을 알 수 없다. – Sujaikareik
이 코드로 질문을 업데이트하는 것이 좋습니다. 이전과 다릅니다. Base64 PEM으로 인코딩 된'.cer' ('----- BEGIN CERTIFICATE -----'태그)에서 인증서를로드 할 수 있습니다. 주석에 게시 한 코드를 사용하십시오. 그러나이'new String (encodedCert) .getBytes (StandardCharsets.UTF_8)'는 할 수 없습니다. 해결책은 – pedrofb