2016-07-07 3 views
0

로그온하려고하는 계정의 암호가 들어있는 Base64 암호화 키를 프로그램에 요구하는 웹 사이트 서비스 (Steam)에 연결하려고합니다. . RSA 키가 있지만 암호로 암호화하는 데 약간의 어려움이 있습니다.두 개의 문자열 변환 -> PublicKey & Base64로 암호화

if(jsonObject.getBoolean("success")){ 
     String timeStamp = jsonObject.getString("timestamp"); 
     String publickey_mod = jsonObject.getString("publickey_mod"); 
     String keyexp = jsonObject.getString("publickey_exp"); 
     String modulus_preHex = new BigInteger(1, publickey_mod.getBytes("UTF-8")).toString(16); 
     String exponent_preHex = new BigInteger(1, keyexp.getBytes("UTF-8")).toString(16); 
     BigInteger modulus_post = new BigInteger(modulus_preHex); 
     BigInteger exponent_post = new BigInteger(exponent_preHex); 
     PublicKey key = getEncrpytedKey(modulus_post, exponent_post); 

     Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA1AndMGF1Padding"); 
     cipher.init(Cipher.ENCRYPT_MODE, key); 

     byte[] passArray = pass.getBytes("UTF-8"); 
     String encode = Base64.encodeBase64(cipher.doFinal(passArray)).toString(); 
     System.out.println(encode + " - encode"); 


    } 

이 내가 RSAKEY를 검색 URL (publickey_mod) 및 만료 (keyexp)에 성공적으로 POST 후 발생 : 여기 내 코드입니다. PublicKey를 암호화 한 후 Base64로 인코딩합니다.

public PublicKey getEncrpytedKey(BigInteger m, BigInteger e) throws Exception{ 
     RSAPublicKeySpec keySpec = new RSAPublicKeySpec(m, e); 
     KeyFactory fact = KeyFactory.getInstance("RSA"); 
     PublicKey pubKey = fact.generatePublic(keySpec); 
     return pubKey; 
} 

^^^ PublicKey를 가져 오는 데 사용 된 것으로 보이는 방법입니다. 나는 그것이 실행되는 암호를 변경할 때이 프로그램을 실행하면

의 '인코딩'문자열이 변경되지 않습니다, 도, 그것은 현재 :

문자열 인코딩 = [[email protected]

RSAKey는 AB8AA7A6C2513D3CFFCA147F64E7B9C5400CCE5B36D3F881387659A51701D76BB383C1E50F52EF8DE28AD20F6257B8E0013720E4704F6ABDBCC19E477BD58C534A93895408157BE7874152A0153499773BC3AE4E536543A74341D58F7EA9CF74487C9560625BACE2315FB0983BD9E78BD812AE7DDC356427CC7626DCB8D25900658FE5E309D35BF794445F6EF9279882699E1CCBEE2F4193BA2634D0F7B24CFD7EC6A2AA8B35A48969C43DBF759095FCBD087C4D2D8123F598A4F43AECE0CE4E8FA536ECD84782092A329DF96FF88A25677AA386669B4ACAA41D7B6AAD456307357C70E25FD027970F5F0CF952894A065A37BA1BD2222A3AC2CD8FB69632560F

입니다. 암호화를 처음 사용하는 사람 중 하나이기 때문에 암호화에 정통하지 않습니다. 어떤 도움

감사합니다, 팀

참고 : 나는 Base64로에 대한 org.apache.commons.codec.binary.Base64;을 사용하고 있습니다.

+0

Base64로 인코딩입니다 및 암호화되지 않습니다 원하는 그래서 byte 배열을 반환 ... –

+0

@LukePark 내가 말했듯이 내가가 시도 첫 번째 시간 중 하나입니다 이런 식으로하면 전문 용어가 파 xD가되지 않습니다. 코드에 다른 문제가 있습니까? – timlampen

답변

0

Base64.encodeBase64 당신이

encode = new String (Base64.encodeBase64(cipher.doFinal(passArray)); 
+0

그래, 내가이 짓을하고 '인코딩'문자열을 수정하지 못했습니다 수정할 수 있지만 그것은 여전히 ​​패스 키가 제대로 암호화되지 않았기 때문에 그것은 증기 서비스에 로그인하게 내버려 두지 않습니다. 코드에 다른 문제가 있습니까? – timlampen

+0

죄송합니다. 스팀 서비스 로그인에 대해 모릅니다. –

+0

스팀 서비스에 대한 지식이 없어도 1) 모듈러스와 지수를 16 진수로 변환 한 다음 RSAPublicKeySpec에 long으로 넣음 2) PublicKey에 비밀번호 추가 및 변환 그 모든 것을 Base64로 바꾼다 – timlampen