2017-09-14 11 views
0

java의 XML 파일에서 공개 키를 변환하는 데 문제가 있습니다. 몇 가지 조사가 끝나면 X509 인코딩이 가장 많이 사용되는 형식 인 것처럼 보입니다.xml에서 공개 키 객체를 만들 수 없습니다.

<RSAKeyValue> 
<Modulus>hkjhvgkjewrlhfelwrkjvhwerkjlrkwjvbrvkjrbvkwjlvbwekvjbekvbwkbrkvbwrwebrvvbrlkvbklvrbkvlreb</Modulus> 
<Exponent>AQAB</Exponent> 
</RSAKeyValue> 

(이 내 실제 키 값이 아닙니다) 여기

내가 뭘하려하는 코드 샘플입니다 :

File fXmlFile = new File(".....\\...\\...\\file.xml"); //Path to xml file 
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
Document doc = dBuilder.parse(fXmlFile); 
doc.getDocumentElement().normalize(); 

NodeList nList = doc.getElementsByTagName("Modulus"); 
Node n = nList.item(0); 

byte[] encKey = Base64.getEncoder().encode(n.getTextContent().getBytes()); 

X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(encKey); 
KeyFactory keyFactory = KeyFactory.getInstance("DSA", "SUN"); 
PublicKey pubKey = keyFactory.generatePublic(pubKeySpec); 

나는 이런 걸 보이는 xml 파일이

마지막 줄에서 다음과 같은 예외가 발생합니다.

java.security.spec.InvalidKeySpecException: Inappropriate key specification: invalid key format 
at sun.security.provider.DSAKeyFactory.engineGeneratePublic(DSAKeyFactory.java:119) 
at java.security.KeyFactory.generatePublic(KeyFactory.java:328) 
at XmlReader.main(XmlReader.java:41) 

키 형식과 관련된 문제가 확실하지 않습니다. 입력이 문자열로 변환되어 키에 대한 중요한 데이터가 손실되는 문제가있을 수 있습니까?

답변

1

당신은 DSA KeyFactory와 RSA 키를 구축하고 계수 및 지수가 base64로

으로 인코딩있는 동안 시도 X509EncodedKeySpec를 사용하는이 :

BigInteger modulus = new BigInteger(Base64.getDecoder().decode(modulusAsString)); 
BigInteger exponent = new BigInteger(Base64.getDecoder().decode(exponentAsString)); 

RSAPublicKeySpec keySpec = new RSAPublicKeySpec(modulus, exponent); 
KeyFactory keyFactory = KeyFactory.getInstance("RSA"); 
PublicKey pubKey =keyFactory.generatePublic(keySpec); 

내가 XML 부분을 생략