2016-01-19 177 views
0

我正在對其餘api實施addSiteAccount1。 PKI意味着用戶名和密碼必須使用公鑰文件進行ssh編碼。我有公鑰文件,我可以生成一個加密的二進制流(例如「f \ xBDZ \ x16 \ xF5 \ xE6 \ xC42 .....」。我如何編碼這個要發送到addSiteAccount1?請問Yodlee RSA加密工具似乎產生十六進制,但我的十六進制編碼字符串encrypted_str.unpack('H*')給我一個錯誤響應(?):「解密失敗的字段信息:FieldInfoSingle」。Yodlee REST API ssh編碼

回答

0

這也可以發生,如果您要發送的值字段的一個不加密。你應該在這種情況下使用BouncyCastle的。在這裏添加代碼,以及用於參比

public static String encrypt(String plainText) throws Exception{ 

Security.addProvider(new BouncyCastleProvider()); 
String pub = "-----BEGIN PUBLIC KEY-----"+ 
     "\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtUS7ZJpnbcu8B+mfGrr0Gz6A23lS893mEFNnuR+frbtWDsoIHTfN4yhfbslkzsAMp3ENvM6Ic/0nHEvftrZxFXSrN7n3xZ+mdzOV/u8rqZoB7MEu6mZvdg3zfj7dGglq/fqlYxzHLlxDHjeCrY0dSD0ZAX1zCm3IZ0ufbMBqTrsSaHAuDlIXaQlJXmz3/Y+YfynJZXth/ats1gTBQhMIU9lWutMa4iKkeehn+P9ja4pC9NUlB9W4pojF2Qs+pY4kgTb9+SP8WjnhoSAmJMQGbYwY3HOZyfuOqAmdjoh9Y0LEZ3tq5NGD0b+T7L+P/FuIzvjYZYq6g/FaWaPcVrVLpwIDAQAB"+ 
     "\n-----END PUBLIC KEY-----"; 
System.out.println(pub); 
String strt= pub; 
StringReader fileReader= new StringReader(strt); 
PEMReader pemReader= new PEMReader(fileReader); 
PublicKey pk= (PublicKey)pemReader.readObject(); 

Cipher c = Cipher.getInstance(RSA_ECB_PKCS5); 
PublicKey publicKey = pk; 
c.init(Cipher.ENCRYPT_MODE, transformKey(publicKey,  
"RSA", new BouncyCastleProvider())); 
byte[] encValue= new byte[0]; 
try { 
    encValue = c.doFinal(plainText.getBytes()); 
} catch (IllegalBlockSizeException e) { 
    e.printStackTrace(); 
} catch (BadPaddingException e) { 
    e.printStackTrace(); 
} 
String encrypted = DatatypeConverter.printHexBinary(encValue); 
System.out.println("Encrypted value: "+encrypted); 
return encrypted; 

}