什么是Rsa加密? RSA算法是最流行的公钥密码算法,使用长度可以变化的密钥。RSA是第一个既能用于数据加密也能用于数字签名的算法。
该如何使用呢? package com.wallet.util;
import java.math.BigInteger; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.Signature; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.security.spec.InvalidKeySpecException; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.RSAPrivateKeySpec; import java.security.spec.RSAPublicKeySpec; import java.security.spec.X509EncodedKeySpec; import java.util.Base64; import java.util.HashMap; import java.util.Map;
import javax.crypto.Cipher;
import org.apache.commons.codec.DecoderException; import org.apache.commons.codec.binary.Hex; import org.slf4j.Logger; import org.slf4j.LoggerFactory;
/** * RSA 加解密 * * 参数在经过Http传输后会对部分特殊字符进行转义, 所以在接收参数后需进行解码 String value = URLDecoder.decode("param", "UTF-8"); * 参数在进行Http传输前需对参数进行编码转义操作, String value = URLEncoder.encode("param", "UTF-8"); * Java 1.8+ 原生支持 Base64, 1.7及以下需导包 安卓原生支持 Base64 */ public class RSA {
// 创建日志记录对象 private static final Logger LOGGER = LoggerFactory.getLogger(RSA.class);
// 声明非对称加密密钥算法 public static final String RSA = "RSA"; // 声明编码集 public static final String CODE = "UTF-8"; // 秘钥长度 public static final Integer KEY_SIZE = 2048; // 声明签名标准 public static final String SHA1WITHRSA = "SHA1WithRSA"; // 加密填充方式, 该属性安卓有效, Java使用RSA加密后, 安卓使用该属性解密, 因安卓和 Java RSA 协议不同 public static final String ECB_PKCS1_PADDING = "RSA/ECB/PKCS1Padding";
// 声明秘钥工厂对象 private static KeyFactory keyFactory = null; // 声明公钥对象 private static RSAPublicKey publicKey = null; // 声明私钥对象 private static RSAPrivateKey privateKey = null;
/** * 静态代码块, 初始化秘钥工厂对象 */ static { try { // 创建秘钥工厂 keyFactory = KeyFactory.getInstance(RSA); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } }
/** * 使用公钥字符获取公钥对象 * * @param publicKeyString 公钥字符串 * @return 公钥对象 */ public static RSAPublicKey getPublicKey(String publicKeyString) { // 把公钥字符串数据加载到秘钥对象中 X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKeyString)); try { // 获取公钥对象 publicKey = (RSAPublicKey) keyFactory.generatePublic(x509EncodedKeySpec); } catch (InvalidKeySpecException e) { e.printStackTrace(); } // 将结果返回 return publicKey; }
/** * 使用私钥字符获取私钥对象 * * @param publicKeyString 私钥字符串 * @return 私钥对象 */ public static RSAPrivateKey getPrivateKey(String privateKeyString) { // 把私钥字符串数据加载到秘钥对象中 PKCS8EncodedKeySpec pKCS8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKeyS |
Java RSA 加密
最新推荐文章于 2024-07-25 11:27:30 发布
本文深入探讨了Java中RSA加密技术的原理和实现过程,包括密钥对生成、加密和解密操作,并且特别关注了在Android环境下如何进行RSA加解密。通过实例代码,详细解析了每个步骤,为开发者提供了实用的参考。
摘要由CSDN通过智能技术生成