【Java】使用 RSA 进行加密和解密
2023-09-27 14:23:50 时间
环境
- JDK 8
- Spring Tool Suite 4.6.1
- Maven 3.6.3
概述
使用 Java 进行 RSA 的加密和解密。
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>jiangbo.java.rsa</groupId>
<artifactId>java-rsa</artifactId>
<version>1.0.0</version>
<description>Java 使用 RSA 进行加密和解密示例</description>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
RSAUtil
package jiangbo.springmvc;
import java.security.GeneralSecurityException;
import java.security.KeyFactory;
import java.security.spec.EncodedKeySpec;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
import javax.crypto.Cipher;
public class RSAUtil {
private static String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCz1zqQHtHvKczHh58ePiRNgOyiHEx6lZDPlvwBTaHmkNlQyyJ06SIlMU1pmGKxILjT7n06nxG7LlFVUN5MkW/jwF39/+drkHM5B0kh+hPQygFjRq81yxvLwolt+Vq7h+CTU0Z1wkFABcTeQQldZkJlTpyx0c3+jq0o47wIFjq5fwIDAQAB";
private static String privateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALPXOpAe0e8pzMeHnx4+JE2A7KIcTHqVkM+W/AFNoeaQ2VDLInTpIiUxTWmYYrEguNPufTqfEbsuUVVQ3kyRb+PAXf3/52uQczkHSSH6E9DKAWNGrzXLG8vCiW35WruH4JNTRnXCQUAFxN5BCV1mQmVOnLHRzf6OrSjjvAgWOrl/AgMBAAECgYAgA0YHdZUFL7mmIvwuE/2+Vh7JVKRAhfM7ILNHQBx7wHkOqro9eWp8mGQhUeDvitWb1C4yizJK0Znkx/pqQtFZuoatUsggocjXFl86FElQwrBp08DvfKfd0bGgy0VTFQVmCtxiqhpAmC7xmXNZXfBD41rl9CKbFfZw05QC5BoQ0QJBAO7LSku97NgFBJQ+vbmVDonuvgnQjVNb7SnwrcpJHEUAGbaVq1a50jz+s6n39TOagASaW6pcY0uwiygYu6xDnkMCQQDAzIGNKFKomTI6djcOyHfQ1ZXqyDQ3guX6nHhzZnNHFF8ZD3fPyyIRSZ3JvPK5iEzJLhB7FRtyWkGcdXgJTWoVAkBfx9zKGqkYUJLwn2XcPWRygPdq2mMFb5bmPqqGu+KB7rNhoBD0nV4tpwALifCpPSxiLEPeRmZxoqN+dsU4KHsfAkAyQt4fK3zpAQ8MGJdf3jkGEzhC/bBHLHPB8pqgEvxIcnIcOWEVpbIa6aMd3Yk1fuftpnmbbLQ8CnWCUUlau3jFAkEAk6bOZIWhTYRwIZcwBdkpyLlbatQFoTTM3i444YutXt3FrFfaWBxge+eYKId+J4dCrt/EmHhSfWKEzHibf6N5Sg==";
public static void main(String[] args) throws GeneralSecurityException {
String encryptedString = encrypt("this is a test!", publicKey);
System.out.println(encryptedString);
String decryptedString = RSAUtil.decrypt(encryptedString, privateKey);
System.out.println(decryptedString);
}
public static String encrypt(String data, String publicKey) throws GeneralSecurityException {
EncodedKeySpec keySpec = new X509EncodedKeySpec(base64Decode(publicKey));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, keyFactory.generatePublic(keySpec));
return base64Encode(cipher.doFinal(data.getBytes()));
}
public static String decrypt(String data, String privateKey) throws GeneralSecurityException {
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(base64Decode(privateKey));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, keyFactory.generatePrivate(keySpec));
return new String(cipher.doFinal(base64Decode(data)));
}
static String base64Encode(byte[] bytes) {
return Base64.getEncoder().encodeToString(bytes);
}
static byte[] base64Decode(String str) {
return Base64.getDecoder().decode(str);
}
}
其中 PublicKey 和 PrivateKey 的生成请参考 【Java】RSA 生成密钥对
相关文章
- Java MD5加密
- 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密
- js前端3des加密 后台java解密
- java aes_cbc_256 加密解密
- 《Java创建对象类型数组的三种方式》
- 哈希加密详解和md5、sha1、sha256、Java 工具类
- JAVA加密--Hmac介绍及使用
- JAVA加密--JCA、JCE、CSP概念、体系架构与使用示例
- 启动报错:java.nio.charset.MalformedInputException: Input length = 1
- java MD5 32位加密
- 第九节:详细讲解Java中的泛型,多线程,网络编程
- Java 字节码加密
- RSA加密和数字签名在Java中常见应用【原创】
- 关于Java中常用加密/解密方法的实现
- Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA
- Java 加密 MD5
- Java 加密 AES 对称加密算法
- Java 加密 base64 encode
- Java使用RSA加密解密签名及校验
- android开发 java与c# 兼容AES加密
- java 加密工具(产生证书)
- JAVA生成RSA非对称型加密的公钥和私钥(利用JAVA API)
- java学习-排序及加密签名时数据排序方式
- java解加密(AES/CBC)异常:java.lang.SecurityException: JCE cannot authenticate the providerBC
- java DES加密解密
- java的sha1加密,转化为python版本
- 一个java的DES加密解密类转换成C#
- node-rsa加密,java解密调试
- C# 加密(Encrypt) 解密(Decrypt) 操作类 java与 C# 可以相互加密解密
- Java POI组件——读、筛选、写Excel