中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java公鑰私鑰是什么意思

發布時間:2020-10-28 21:43:04 來源:億速云 閱讀:203 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關Java公鑰私鑰是什么意思,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

在編程中,我們為了保證數據安全,免不了要經常進行數據加密,于是產生了各種各樣的加密算法.無論怎樣,都還是存在被破解的風險.今天就來說說RSA算法.

背景

RSA公鑰加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美國麻省理工學院)開發的。RSA取名來自開發他們三者的名字。RSA是目前最有影響力的公鑰加密算法,它能夠抵抗到目前為止已知的所有密碼攻擊,已被ISO推薦為公鑰數據加密標準。RSA算法基于一個十分簡單的數論事實:將兩個大素數相乘十分容易,但那時想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰。

雖然上面的解釋很深奧,但是你只要知道,這個算法非常安全就行了.

加密解密過程

假設有兩個用戶A,B. B在它的一側,生成了公鑰和私鑰,私鑰只有B自己知道,然后把公鑰分享給A,當然不僅是A,B的公鑰只要分享給了所有他信賴的人,那么這些人都將能解密A的數據.

過程1:
A使用B的公鑰加密數據,然后B使用私鑰解密數據.這時所有擁有公鑰的用戶是不能解密數據的,因為他們沒有私鑰.這個數據只有A和B能夠獲取,這就保證了數據的安全.

過程2:
B使用私鑰加密數據,那么所有有公鑰的用戶都可以使用公要解密數據.其他沒有公鑰的人是沒有辦法獲取到數據的,這也保證了數據的安全性.

Java公鑰私鑰是什么意思

非對稱加密

通過上面的過程,我們可以看到這樣一個不同于以往加密算法的現象,那就是非對稱.什么是非對稱?

你不能通過自己的加密密鑰,反向解密,這個過程是不可逆的,正是因為如此才大大提高了它的安全性.公鑰和私鑰都可以進行加密解密,但他們必須配對使用.在私鑰被高度保護的情況下,永遠不會出現被破解的可能.

java實現

package com.mike;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.Key;
import java.security.KeyPair;
import java.security.KeyPairGenerator;

import javax.crypto.Cipher;

import org.apache.commons.codec.binary.Base64;

/**
 * The class Rsa.java
 */
public class Rsa {

    private static String PUBLIC_KEY_FILE = "C:\\my\\PublicKey";
    private static String PRIVATE_KEY_FILE = "C:\\my\\PrivateKey";

    /**
     * 初始化密鑰
     *
     * @return
     */
    public static void productKey() {
        try {
            KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
            keyGen.initialize(1024);
            KeyPair keyPair = keyGen.generateKeyPair();// 生成密鑰對
            Key pubKey = keyPair.getPublic(); // 獲取公鑰
            Key priKey = keyPair.getPrivate(); // 獲取私鑰
            ObjectOutputStream oos1 = null;
            ObjectOutputStream oos2 = null;
            try {
                /** 用對象流將生成的密鑰寫入文件 */
                oos1 = new ObjectOutputStream(new FileOutputStream(PUBLIC_KEY_FILE));
                oos2 = new ObjectOutputStream(new FileOutputStream(PRIVATE_KEY_FILE));
                oos1.writeObject(pubKey);
                oos2.writeObject(priKey);
            } catch (Exception e) {
                throw e;
            } finally {
                /** 清空緩存,關閉文件輸出流 */
                oos1.close();
                oos2.close();
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 公鑰加密方法 私鑰加密也一樣
     * 
     * @param source
     *            源數據
     * @return
     * @throws Exception
     */
    public static String encrypt(String source) throws Exception {
        Key publicKey;
        ObjectInputStream ois = null;
        try {
            /** 將文件中的公鑰對象讀出 */
            ois = new ObjectInputStream(new FileInputStream(PUBLIC_KEY_FILE));
            publicKey = (Key) ois.readObject();
        } catch (Exception e) {
            throw e;
        } finally {
            ois.close();
        }

        /** 得到Cipher對象來實現對源數據的RSA加密 */
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] b = source.getBytes();
        /** 執行加密操作 */
        byte[] b1 = cipher.doFinal(b);
        return Base64.encodeBase64String(b1);
    }

    /**
     * 私鑰解密算法 公鑰解密一樣
     * 
     * @param cryptograph
     *            密文
     * @return
     * @throws Exception
     */
    public static String decrypt(String cryptograph) throws Exception {
        Key privateKey;
        ObjectInputStream ois = null;
        try {
            /** 將文件中的私鑰對象讀出 */
            ois = new ObjectInputStream(new FileInputStream(PRIVATE_KEY_FILE));
            privateKey = (Key) ois.readObject();
        } catch (Exception e) {
            throw e;
        } finally {
            ois.close();
        }

        /** 得到Cipher對象對已用公鑰加密的數據進行RSA解密 */
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] b1 = Base64.decodeBase64(cryptograph);

        /** 執行解密操作 */
        byte[] b = cipher.doFinal(b1);
        return new String(b);
    }

    public static void main(String[] args) throws Exception {
        Rsa.productKey();
        String msg = "我是加密信息";
        String encryt = Rsa.encrypt(msg);
        System.out.println("加密后的字符:"+encryt);
        System.out.println("解密后的字符:"+Rsa.decrypt(encryt));
    }
}

這樣有了密鑰文件,你就可以進行加密和簽名了。

關于Java公鑰私鑰是什么意思就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

织金县| 石家庄市| 吴江市| 习水县| 鹤壁市| 太和县| 新巴尔虎左旗| 沙洋县| 阿巴嘎旗| 平乡县| 龙陵县| 蛟河市| 平顶山市| 长宁区| 攀枝花市| 河间市| 苏尼特右旗| 三都| 微博| 莎车县| 庆阳市| 仁寿县| 庄浪县| 内丘县| 通江县| 苍梧县| 桐乡市| 海城市| 太白县| 谷城县| 金湖县| 定边县| 合川市| 巴林左旗| 广平县| 西畴县| 辽源市| 玉屏| 泗水县| 嘉义县| 永丰县|