java rsa加密

作者:原创时间:2022-04-18
文档

java rsa加密是什么?让我们一起来了解一下吧!

java rsa加密是java中的一种非对称加密算法。非对称加密是指加密密钥与加密秘钥不一样。我们经常看见的非对称加密算法有两种,分别是rsa和dsa。

 

应用rsa的时候我们一般需要公钥与私钥,但我们采用公钥加密的时候,便使用私钥解密;反之,采用私钥加密的时候,便要使用公钥进行解密。在java中,我们先应用genkeypair()函数产生公钥与私钥同时保存在map集合里面。接着,我们以产生的公钥对明文进行加密。针对已加密的密文,我们再利用私钥对其解密。

实战演练,具体步骤如下:

package rsademo;
 
import javax.crypto.Cipher;
import java.nio.charset.StandardCharsets;
import java.security.*;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
 
/**
 * @author 一只鲨go
 * @title RSA_Test
 * @CreateTime 2021-05-13
 */
 
 
public class RSA_Algorithm {
    private PrivateKey privateKey;
    private PublicKey publicKey;
    private static String algorithm = "RSA";
    private static String signAlgorithm = "MD5withRSA";
 
    public RSA_Algorithm() throws NoSuchAlgorithmException {
        //生成密钥对对象
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(algorithm);
        //生成密钥对
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        //生成公钥
        this.publicKey = keyPair.getPublic();
        //生成私钥
        this.privateKey = keyPair.getPrivate();
 
 
    }
 
    /**
     * 公钥字符串还原为公钥
     *
     * @param publicKeyString 公钥字符串
     * @return 公钥
     * @throws Exception
     */
    public Key publicKeyStringToKey(String publicKeyString) throws Exception {
        byte[] publicBytes = Base64.getDecoder().decode(publicKeyString);
        KeyFactory keyFactory = KeyFactory.getInstance(algorithm);
        PublicKey publicKey = keyFactory.generatePublic(new X509EncodedKeySpec(publicBytes));
        return publicKey;
    }
 
    /**
     * 私钥字符串还原为私钥
     *
     * @param privateKeyString 私钥字符串
     * @return 私钥
     * @throws Exception
     */
    public PrivateKey privateKeyStringToKey(String privateKeyString) throws Exception {
        byte[] privateBytes = Base64.getDecoder().decode(privateKeyString);
        KeyFactory keyFactory = KeyFactory.getInstance(algorithm);
        PrivateKey privateKey = keyFactory.generatePrivate(new PKCS8EncodedKeySpec(privateBytes));
        return privateKey;
    }
 
    /**
     * 返回公钥字节数组
     *
     * @return
     */
    public byte[] publicKeyEncoded() {
        return this.publicKey.getEncoded();
    }
 
    /**
     * 返回私钥字节数组
     *
     * @return
     */
    public byte[] privateKeyEncoded() {
        return this.privateKey.getEncoded();
    }
 
    /**
     * 公钥byteToString转码
     *
     * @return
     */
    public String publicKeyToString() {
        return Base64.getEncoder().encodeToString(publicKeyEncoded());
    }
 
    /**
     * 私钥byteToString转码
     *
     * @return
     */
    public String privateKeyToString() {
        return Base64.getEncoder().encodeToString(privateKeyEncoded());
    }
 
    /**
     * 公钥加密
     *
     * @param input     明文
     * @param publicKey 公钥
     * @return 密文字符串
     * @throws Exception
     */
    public String pkEncoded(String input, String publicKey) throws Exception {
        byte[] bytes = input.getBytes(StandardCharsets.UTF_8);
        Cipher cipher = Cipher.getInstance(algorithm);
        cipher.init(Cipher.ENCRYPT_MODE, publicKeyStringToKey(publicKey));
        byte[] cipherText = cipher.doFinal(bytes);
        return Base64.getEncoder().encodeToString(cipherText);
    }
 
    /**
     * 私钥解密
     *
     * @param cipherText 密文
     * @param privateKey 私钥
     * @return 明文字符串
     * @throws Exception
     */
    public String skDecoded(String cipherText, String privateKey) throws Exception {
        byte[] cipherbytes = Base64.getDecoder().decode(cipherText);
        Cipher cipher = Cipher.getInstance(algorithm);
        cipher.init(Cipher.DECRYPT_MODE, privateKeyStringToKey(privateKey));
        byte[] input = cipher.doFinal(cipherbytes);
        return new String(input);
 
    }
 
    /**
     * 数字签名:私钥加密
     *
     * @param signature  签名明文字符串
     * @param privateKey 私钥字符串
     * @return 签名字符串
     * @throws Exception
     */
    public String skEncoded(String signature,String privateKey) throws Exception {
        Signature signature1 = Signature.getInstance(signAlgorithm);
        signature1.initSign(privateKeyStringToKey(privateKey));
        signature1.update(signature.getBytes(StandardCharsets.UTF_8));
        byte[] sign = signature1.sign();
        return Base64.getEncoder().encodeToString(sign);
    }
 
     /**
     * 判断签名:公钥解密
     * @param input
     * @param signDate 签名密文字符串
     * @param publicKey 公钥
     * @return boolen
     * @throws Exception
     */
    public boolean pkDecoded(String input,String signDate,String publicKey)throws Exception {
 
        Signature  signature = Signature.getInstance(signAlgorithm);
        signature.initVerify(publicKeyStringToKey(publicKey));
        signature.update(input.getBytes(StandardCharsets.UTF_8));
 
        return signature.verify(Base64.getDecoder().decode(signDate));
    }
 
}

 以上就是小编今天的分享了,希望可以帮助到大家。

显示全文
java path java paypal java phoenix java ping java pipeline java rsa公钥加密 java rsa私钥加密 java rtp java runnable java runtime.exec java rxjava java sandbox java script java selector java selenium java semaphore java separator java sequence java serializable java serializable接口 java rotate java reverse java reverse() java retrofit java resume java resultset java result java rest java requests java partial java request java parser java repeat java parse java pandas java override java render java region java require java resolve