Android RSA非对称加密/解密

什么是Rsa加密

RSA算法是最流行的公钥密码算法,使用长度可以变化的密钥。RSA是第一个既能用于数据加密也能用于数字签名的算法。

RSA算法原理如下:

1.随机选择两个大质数p和q,p不等于q,计算N=pq;

2.选择一个大于1小于N的自然数e,e必须与(p-1)(q-1)互素。

3.用公式计算出d:d×e = 1 (mod (p-1)(q-1)) 。

4.销毁p和q。 最终得到的N和e就是“公钥”,d就是“私钥”,发送方使用N去加密数据,接收方只有使用d才能解开数据内容。 
RSA的安全性依赖于大数分解,小于1024位的N已经被证明是不安全的,而且由于RSA算法进行的都是大数计算, 
使得RSA最快的情况也比DES慢上倍,这是RSA最大的缺陷,因此通常只能用于加密少量数据或者加密密钥, 但RSA仍然不失为一种高强度的算法。

以下代码可以直接拿去使用:

/**
* Created by Xinghai.Zhao on 17/08/28.
*/
public class RSAUtils {
private static final String RSA = "RSA";
//公钥
private static final String PUBLIC_KEY = "填写你的公钥";
//私钥
private static final String PRIVATE_KEY = "填写你的私钥";

/** 非对称加密 */
public static String getEncodeData(String s) {
try {
byte[] buffer = Base64.decode(PUBLIC_KEY, Base64.DEFAULT);
KeyFactory keyFactory = KeyFactory.getInstance(RSA);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(buffer);
PublicKey publicKey = keyFactory.generatePublic(keySpec);
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] bytes = cipher.doFinal(s.getBytes());
return Base64.encodeToString(bytes, Base64.DEFAULT);
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
/** 非对称解密 */
public static String getDecodeData(String s) {
try {
byte[] decode = Base64.decode(PRIVATE_KEY, Base64.DEFAULT);
PrivateKey privateKey =
KeyFactory.getInstance(RSA).generatePrivate(new
PKCS8EncodedKeySpec(decode));
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] result = cipher.doFinal(Base64.decode(s,Base64.DEFAULT));
return new String(result);
} catch (Exception e) {
e.printStackTrace();
return "";
}
}


}

为系统而生,为框架而死,为debug奋斗一辈子; 吃符号的亏,上大小写的当,最后死在需求上。