2016-01-19 185 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; 

}