加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java非对称加密(公钥加密,私钥解密)

发布时间:2020-12-14 23:38:46 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.Key;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import javax.crypto.Cipher;

/**
 * 公钥加密,私钥解密(非对称加密)
 * 
 */
public class AsymmetricEncryption {

    public static void main(String[] args) throws Exception {
        publicEnrypy();
        privateEncode();
    }

    /**
     * 加密的方法,使用公钥进行加密
     * @throws Exception
     */
    public static void publicEnrypy() throws Exception {

        Cipher cipher = Cipher.getInstance("RSA");

        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");

        // 生成钥匙对
        KeyPair keyPair = keyPairGenerator.generateKeyPair();

        // 得到公钥
        Key publicKey = keyPair.getPublic();

        // 得到私钥
        Key privateKey = keyPair.getPrivate();

        // 设置为加密模式
        cipher.init(Cipher.ENCRYPT_MODE,publicKey);

        // 对数据进行加密
        byte[] result = cipher.doFinal("aaa".getBytes());

        //把私钥保存到硬盘上
        saveKey(privateKey);

        //把加密后的数据保存到硬盘上
        saveData(result);
    }

    /**
     * 解密的方法,使用私钥进行解密
     * @throws Exception
     */
    public static void privateEncode() throws Exception {
        Cipher cipher = Cipher.getInstance("RSA");

        // 从硬盘中读取私钥
        Key privateKey = loadKey();

        //设置为解密模式,用私钥解密
        cipher.init(Cipher.DECRYPT_MODE,privateKey);

        // 从硬盘中读取加密后的数据
        byte[] data = loadData();

        //对加密后的数据进行解密,返回解密后的结果
        byte[] result = cipher.doFinal(data);

        System.out.println(new String(result));
    }

    /**
     * 从硬盘中加载加密后的文件
     * @return
     * @throws FileNotFoundException
     * @throws IOException
     */
    private static byte[] loadData() throws FileNotFoundException,IOException {
        FileInputStream fileInputStream = new FileInputStream(new File(
                "E://data.data"));
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

        byte[] buffer = new byte[1024];
        int len = 0;

        while ((len = fileInputStream.read(buffer)) != -1) {
            outputStream.write(buffer,len);
        }

        fileInputStream.close();

        return outputStream.toByteArray();
    }

    /**
     * 从硬盘中加载私钥
     * @return
     * @throws IOException
     * @throws FileNotFoundException
     * @throws ClassNotFoundException
     */
    private static Key loadKey() throws IOException,FileNotFoundException,ClassNotFoundException {
        ObjectInputStream inputStream = new ObjectInputStream(
                new FileInputStream(new File("E://private_key")));
        Key privateKey = (Key) inputStream.readObject();
        return privateKey;
    }

    /**
     * 把加密后的密文保存到硬盘上
     * @param result
     * @throws FileNotFoundException
     * @throws IOException
     */
    private static void saveData(byte[] result) throws FileNotFoundException,IOException {
        FileOutputStream fileOutputStream = new FileOutputStream(new File(
                "E://data.data"));
        fileOutputStream.write(result);
    }

    /**
     * 把私钥保存到硬盘上
     * @param privateKey
     * @throws IOException
     * @throws FileNotFoundException
     */
    private static void saveKey(Key privateKey) throws IOException,FileNotFoundException {
        ObjectOutputStream outputStream = new ObjectOutputStream(
                new FileOutputStream(new File("E://private_key")));
        outputStream.writeObject(privateKey);
    }

}

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读