您的位置:首页 > 其它

RSA加密解密的使用!

2017-03-20 15:46 232 查看
根据公司的要求需要对一些数据保密,所以与公司做后台的开发人员进行对接测试,特此记录:在进行加密解密之前我也是网上进行了大量的资料查阅,感觉比较详细的在此列出,以做参考(由于我这里与该方法实现有所出入,所以自己另外写了个方法): http://blog.csdn.net/eyishion/article/details/51308786 我这边的需求是这样的:服务端创建公钥=>客户端(用服务端提供的公钥对用户名和密码进行加密生成密文)=>服务端。直接上代码:
/**
* 使用公钥对obj进行加密返回密文
* @obj            需要进行加密的字符串
* @publicKeyStr   服务端获取的公钥
* */
public static byte[] encodeByPublicKey(String obj, String publicKeyStr)
{
byte[] result;
try {
byte[] bytes=new BASE64Decoder().decodeBuffer(publicKeyStr);
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(bytes);
KeyFactory factory = KeyFactory.getInstance("RSA");
PublicKey publicKey = factory.generatePublic(x509EncodedKeySpec);
Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encode = obj.getBytes();
result = cipher.doFinal(encode);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
return result;
}
在与服务端对接加解密的过程中遇到的几个问题:1.服务端以字符串形式传过来公钥,在解密的时候需要用base64转成byte数组:  
     byte[] bytes=new BASE64Decoder().decodeBuffer(publicKeyStr);
2.服务端与android端加解密的方式不同导致不一致,需要设置客服端的加密方式,
在博客:http://blog.csdn.net/u010670151/article/details/53006232有详细讲解:
Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding");
3.加密完成后的密码需要转成字符串的形式传给服务端,需要使用Base64进行转换:
String cliperText = (new BASE64Encoder()).encode(result);
java端编译有自带的base64,android这边需要另行下载:BASE64_all.rar
 
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐