简单的先介绍RSA这个加密方式,这个加密方式到目前为止还没有一个组织和个人在公开的场面宣布破解了,各大银行的系统都在用这种加密的方式,当然银行的系统比较麻烦具体是什么框架怎么搞的也不太清楚。RSA属于非对称的算法,具体的对称和非对称的区别自行百度,在这里不在多余赘述。公钥加密私钥解密或者私钥加密公钥解密,下面说说我们项目里面加密和解密是怎么用的:我们的用法相对来说比较简单,服务器生成公钥和私钥,并且把公钥给我们,然后传输数据的时候我们用公钥加密服务器那边用私钥解密,当服务器给我们数据的时候他们用私钥加密我们用公钥解密,这个密钥对是固定的而且私钥只能在生成的那台机子上用换一台机子就会出问题,公钥无所谓,因为公钥本来就是给别人看的,下面上代码:
/**
* 用公钥加密 <br>
* 每次加密的字节数,不能超过密钥的长度值减去11
*
* @param data 需加密数据的byte数据
* @param pubKey 公钥
* @return 加密后的byte型数据
*/
public static byte[] encryptData(byte[] data, PublicKey publicKey) {
try {
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
// 编码前设定编码方式及密钥
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
// 传入编码数据并返回编码结果
return cipher.doFinal(data);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 用公钥解密
*
* @param encryptedData 经过encryptedData()加密返回的byte数据
* @param publicKey 公钥
* @return
*/
public static byte[] decryptData(byte[] encryptedData, PublicKey publicKey) {
try {
Cipher cipher = Cipher.getInstance(RSA);
cipher.init(Cipher.DECRYPT_MODE, publicKey);
return cipher.doFinal(encryptedData);
} catch (Exception e) {
return null;
}
}
以上两个方法就是用公钥加密解密的方法,RSA在java里面已经集成好了所以直接就可以调用现成的方法,现在着重说一下这段代码:
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
这个里面的参数android的话默认是RSA但是我们的PHP默认的是PKCS1Padding所以光这个问题搞了半天,需要把PKCS1Padding也加进去。到现在为止最基本的加密解密就可以完成了,有什么问题可以在下面留言