RSA非对称加密代码

文章展示了如何使用RSA加密算法进行私钥加密、公钥解密的过程,以及如何利用RSA进行数字签名以验证数据完整性。在Java环境中,通过KeyPairGenerator生成密钥对,使用Cipher进行加密和解密操作,同时结合Base64编码处理字节数据。此外,还详细说明了如何进行签名和校验签名的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

01 RSA加密算法

  最常用的非对称加密算法,基于大数的因式分解数学难题

  应用场景: 支付

在这里插入图片描述


01 私钥加密公钥解密

public static void main(String[] args) throws Exception{
    // 原文
    String input = "文华";
    // 算法
    String algorithm = "RSA";
    KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(algorithm);
    // 生成密钥对
    KeyPair keyPair = keyPairGenerator.generateKeyPair();
    // 生成私钥
    PrivateKey privateKey = keyPair.getPrivate();
    // 生成公钥
    PublicKey publicKey = keyPair.getPublic();
    // 获取私钥的字节数组
    byte[] privateKeyEncoded = privateKey.getEncoded();
    // 获取公钥字节数组
    byte[] publicKeyEncoded = publicKey.getEncoded();
    // 使用base64进行编码
    String privateEncodeString = Base64.encode(privateKeyEncoded);
    String publicEncodeString = Base64.encode(publicKeyEncoded);
    // 打印公钥和私钥
    System.out.println("私钥---" + privateEncodeString);
    System.out.println("公钥---" + publicEncodeString);
    System.out.println("下面是加密--------");
    // 创建加密对象
    Cipher cipher = Cipher.getInstance(algorithm);
    // 对加密进行初始化
    // 第一个参数:加密的模式 第二个参数:使用私钥加密
    // 我想使用私钥进行加密
    cipher.init(Cipher.ENCRYPT_MODE,privateKey);
    // 使用私钥进行加密
    byte[] bytes = cipher.doFinal(input.getBytes());
    // 加密后
    String encode = Base64.encode(bytes);
    System.out.println(encode);
    System.out.println("下面是解密--------");
    // 创建解密对象
    Cipher cipher1 = Cipher.getInstance(algorithm);
    // 使用公钥解密
    cipher1.init(Cipher.DECRYPT_MODE,publicKey);
    // 使用base64对密文进行转码
    byte[] decode = Base64.decode(encode);
    // 解密
    byte[] bytes1 = cipher1.doFinal(decode);
    // 原文
    String s = new String(bytes1);
    System.out.println(s);
}

02 数字签名

public static void main(String[] args) throws Exception{
    String input = "123";
    // 生成私钥和公钥
    KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
    KeyPair keyPair = keyPairGenerator.generateKeyPair();
    PrivateKey privateKey = keyPair.getPrivate();
    PublicKey publicKey = keyPair.getPublic();
    // 获取数字签名
    String signature = getSignature(input, "sha256withrsa", privateKey);
    System.out.println(signature);
    // 校验签名,返回为true,说明没有被改过
    boolean flag = verifySignature(input, "sha256withrsa", publicKey, signature);
    System.out.println(flag);
}
private static boolean verifySignature(String input, String algorithm, PublicKey publicKey, String signaturedData)
        throws Exception{
    // 获取签名对象
    Signature signature = Signature.getInstance(algorithm);
    // 初始化校验
    signature.initVerify(publicKey);
    // 传入原文
    signature.update(input.getBytes());
    // 校验数据
    return signature.verify(Base64.decode(signaturedData));
}
private static String getSignature(String input, String algorithm, PrivateKey privateKey) throws Exception{
    // 获取签名对象
    Signature signature = Signature.getInstance(algorithm);
    // 初始化签名
    signature.initSign(privateKey);
    // 传入原文
    signature.update(input.getBytes());
    // 开始签名
    byte[] sign = signature.sign();
    // 使用base64进行编码
    return Base64.encode(sign);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值