2016-07-07 29 views
0

所以我試圖連接到一個網站服務(蒸汽),這需要程序有一個Base64加密密鑰,其中包含我嘗試登錄的帳戶的密碼。我有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"); 


    } 

這發生一個成功的POST到我檢索RSAKEY的URL(publickey_mod),當它到期(keyexp)之後。加密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

請注意,我不是很熟悉加密,因爲這是我第一次嘗試加密。

感謝您的幫助, 添

注意:我使用org.apache.commons.codec.binary.Base64;支持Base64。

+0

Base64是一種編碼和不加密...... –

+0

@LukePark就像我說的,這是我試圖第一時間之一做這樣的事情,所以術語不符合標準xD。你看到代碼的其他問題嗎? – timlampen

回答

0

Base64.encodeBase64返回byte陣列,所以你想要的是

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

好吧,我這樣做,並能夠修復'編碼'字符串不變,但它仍然不讓我登錄蒸汽服務,因爲密碼未正確加密。你看到代碼的其他問題嗎? – timlampen

+0

抱歉,我不知道蒸汽服務登錄。 –

+0

即使沒有蒸汽服務的知識,你能否確保我是正確的: 1)將模數和指數轉換爲一個十六進制,然後將它們放入RSAPublicKeySpec中 2)將密碼添加到PublicKey並轉換整個事情到Base64 – timlampen

相關問題