JAVA使用RSA加密

JAVA使用RSA加密

所需依赖:

        <dependency>
			<groupId>cn.hutool</groupId>
			<artifactId>hutool-all</artifactId>
			<version>4.5.2</version>
		</dependency>

代码示例:

import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;

public class TestDemo {

    public static void main(String[] args) throws Exception {
        createRsa();
        rsa();
    }

    static void createRsa() {
        // 初始化RSA工具,生成密钥对
        RSA rsa = new RSA();
        // 获取公钥
        String pubKey = rsa.getPublicKeyBase64();
        System.out.println("pubKey:"+pubKey);
        // 获取私钥
        String priKey = rsa.getPrivateKeyBase64();
        System.out.println("priKey:"+priKey);
    }

    static void rsa() {
        String data = "这是一个小例子haha";
        String pubKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCR+01RrLWQSJa25s8yk9dvR664A2zdITUvhGW0UCo31yFg8oPnFr965rFUGmnJhsEo+9pAC8/+qfBoHdC7SksZm7lZn3WTMgGvBIiRjWf1J4xklBqOjjCFlvDzeuESdtwh4OL7d8FLfVtxbedeiT1R9E80a/6e4B5GYefvm4DvfQIDAQAB";
        String priKey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAJH7TVGstZBIlrbmzzKT129HrrgDbN0hNS+EZbRQKjfXIWDyg+cWv3rmsVQaacmGwSj72kALz/6p8Ggd0LtKSxmbuVmfdZMyAa8EiJGNZ/UnjGSUGo6OMIWW8PN64RJ23CHg4vt3wUt9W3Ft516JPVH0TzRr/p7gHkZh5++bgO99AgMBAAECgYATeGYen59zyAq6CFzYTRmt0Oy/xE0vzS8P0GPUQeDvo7Ti/lWTa9hMJxq9sewsIdn/gl/grPKn77iN2nQtlsIfSc+y9fINcttNdxWyYyHVjqzgym0gUAMwQIM5RxOvQ/EB63pI+kaMaUdSvTxV2Lp0k4BPJagEsT4qkfogSCj1bQJBAP0R1v6UFz/bTNw2R9RSjqGzOyaxW8MCL2ZCMJbavdFAK/2b9Rz3dQ978XtxwQqlVQwnIPZMpqwI/2CRsm2aGj8CQQCTrAb1bsifZDMNX1YWU+iaGjH4aSXBvF9HKU4sEpANbLHl2UWoRGJ8aEVTsOPmNAWEwkilfLcPmGblFWOvBa9DAkEAkLCIeZl2CX563VTzkIN7JRxyb1bsHfy72P1zBm0eJetIu4FVjTA2b5nvoSKSumF41K/yep+sk6O5Tx8+Isf+xQJAV2ydxgmrLmn0q3MIlTlh2HGvqcAeQT8TLR7wD7mBnOD/xPLHgWHS6JIWkQCFO5EKv1kCBy75dXslV3Q9Sq3T3wJBANzn8qbTKJKAMVqEQo4/h/qCEDF1vO+EBiyH3oVK4Eu0pR3Zvsz5LKBwCnEZgcPGAY/49bTcp+mmuGe4g/0+yZE=";

        // 初始化RSA工具并设置私钥
        RSA priRsa = new RSA(priKey, null);
        // 初始化RSA工具并设置公钥
        RSA pubRsa = new RSA(null, pubKey);
        // 初始化自定义密钥对RSA工具,但是一般不这么用,因为公私钥需要分离
        RSA Rsa = new RSA(priKey, pubKey);

        // 公钥加密
        String encodeStr = pubRsa.encryptBase64(data, KeyType.PublicKey);
        System.out.println("encodeStr by public key:" + encodeStr);
        // 私钥解密
        String decodeStr = priRsa.decryptStr(encodeStr, KeyType.PrivateKey);
        System.out.println("decodeStr by private key:" + decodeStr);

        // 私钥加密
        String encodeStr1 = priRsa.encryptBase64(data, KeyType.PrivateKey);
        System.out.println("encodeStr1 by private key:" + encodeStr1);
        // 公钥解密
        String decodeStr1 = pubRsa.decryptStr(encodeStr1, KeyType.PublicKey);
        System.out.println("decodeStr1 by public key:" + decodeStr1);
    }
RSA算法是一种非对称加密算法,它可以用于加密数据和数字签名。在Java中,可以使用Java Cryptography Architecture(JCA)提供的API来实现RSA加密和解密。下面是简单的示例代码: ```java import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.SecureRandom; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import javax.crypto.Cipher; public class RSAEncryption { public static void main(String[] args) throws Exception { String plainText = "Hello World"; // 生成RSA公钥和私钥 KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(2048, new SecureRandom()); KeyPair keyPair = keyPairGenerator.generateKeyPair(); PublicKey publicKey = keyPair.getPublic(); PrivateKey privateKey = keyPair.getPrivate(); // 使用公钥加密 Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE, publicKey); byte[] cipherText = cipher.doFinal(plainText.getBytes()); // 使用私钥解密 cipher.init(Cipher.DECRYPT_MODE, privateKey); byte[] decryptedText = cipher.doFinal(cipherText); System.out.println("Plain Text: " + plainText); System.out.println("Encrypted Text: " + new String(cipherText)); System.out.println("Decrypted Text: " + new String(decryptedText)); } } ``` 上面的代码先生成了一个2048位的RSA公钥和私钥,然后使用公钥加密了一个字符串,再使用私钥解密获得原始字符串。在实际使用中,我们通常需要将公钥和私钥保存在文件中,以便在不同的应用程序中使用。可以使用PKCS8EncodedKeySpec和X509EncodedKeySpec类来将公钥和私钥转换为字节数组,以便在文件中保存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值