1. 介绍
RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。
2. 具体实现
密钥可以是字节数组,也可以是Base64编码过的。加密后对数据的输出采用2种方式:Base64、Hex,其中Base64使用的是Android SDK里面的API,具体代码如下:
package com.fantasy.blogdemo.crypto.utils;
import android.util.Base64;
import com.fantasy.blogdemo.utils.ConvertUtils;
import java.security.Key;
import java.security.KeyFactory;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import javax.crypto.Cipher;
/**
* RSA加解密工具类
*
* author : Fantasy
* version : 1.0, 2019-08-25
* since : 1.0, 2019-08-25
*
*/
public class RSAUtils {
private static final String CHARSET = "UTF-8";
/**
* 加密,输出Base64字符串密文
*
* @param data 明文
* @param publicKey 公钥
* @param keySize 公钥大小,举例:1024, 2048...
* @param transformation 类型,格式为:加密算法/加密模式/填充方式,举例:RSA/None/PKCS1Padding。
* 相关取值可以查看下列两个文档:
*
*
JavaSE 8 API* 中的 javax.crypto.Cipher
*
* Standard Algorithm Name Documentation
*
* @return 密文
*/
public static String encryptBase64(String data, byte[] publicKey, int keySize, String transformation) {
try {
return Base64.encodeToString(handle(data.getBytes(CHARSET), publicKey, keySize, transformation,
true), Base64.NO_WRAP);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 加密,输出Base64字符串密文
*
* @param data 明文
* @param publicKey 公钥(Base64字符串)
* @param keySize 公钥大小,举例:1024, 2048...
* @param transformation 类型,格式为:加密算法/加密模式/填充方式,举例:RSA/None/PKCS1Padding。
* 相关取值可以查看下列两个文档:
*
*
JavaSE 8 API* 中的 javax.crypto.Cipher
*
* Standard Algorithm Name Documentation
*
* @return 密文
*/
public static String encryptBase64(String data, St