国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

密碼學【java】初探究加密方式之非對稱加密

這篇具有很好參考價值的文章主要介紹了密碼學【java】初探究加密方式之非對稱加密。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

非對稱加密

  1. 非對稱加密算法又稱現(xiàn)代加密算法。非對稱加密是計算機通信安全的基石,保證了加密數(shù)據(jù)不會被破解。
  2. 與對稱加密算法不同,非對稱加密算法需要兩個密鑰:公開密鑰(publickey) 和私有密(privatekey)
  3. 公開密鑰和私有密鑰是一對。如果用公開密鑰對數(shù)據(jù)進行加密,只有用對應的私有密鑰才能解密。如果用私有密鑰對數(shù)據(jù)進行加密,只有用對應的公開密鑰才能解密。
  4. 因為加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法。

  • 特點
    • 加密和解密使用不同的密鑰
    • 如果使用私鑰加密, 只能使用公鑰解密
    • 如果使用公鑰加密, 只能使用私鑰解密
    • 處理數(shù)據(jù)的速度較慢, 因為安全級別高

  • 示例
    1. 首先生成密鑰對, 公鑰為(5,14), 私鑰為(11,14),A希望將原文2發(fā)送給B
    2. A使用公鑰加密數(shù)據(jù). 2的5次方mod 14 = 4 , 將密文4發(fā)送給B
    3. B使用私鑰解密數(shù)據(jù). 4的11次方mod14 = 2, 得到原文2

1 常見算法

  • RSA
    • RSA是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的。
    • RSA公開密鑰密碼體制是一種使用不同的加密密鑰與解密密鑰。
    • RSA能夠抵抗到目前為止已知的絕大多數(shù)密碼攻擊,已被ISO推薦為公鑰數(shù)據(jù)加密標準。只有短的RSA鑰匙才可能被強力方式解破。世界上還沒有任何可靠的攻擊RSA算法的方式。只要其鑰匙的長度足夠長,用RSA加密的信息實際上是不能被解破的。
    • RSA算法基于一個十分簡單的數(shù)論事實:將兩個大質數(shù)相乘十分容易,但是想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰。
    • RSA在線工具
    • 希望深入學習RSA的小伙伴,請移步公開密鑰加密之RSA算法
  • ECC(Elliptic curve cryptography)
    • 橢圓曲線密碼學(ECC),一種建立公開密鑰加密的演算法,基于橢圓曲線數(shù)學。橢圓曲線在密碼學中的使用是在1985年由Neal Koblitz和Victor Miller分別獨立提出的。
    • 希望深入學習ECC的小伙伴,請移步ECC橢圓曲線加解密原理詳解(配圖)

2 生成公鑰和私鑰

    public static void main(String[] args) throws NoSuchAlgorithmException {
        // 加密算法
        String algorithm = "RSA";
        //  創(chuàng)建密鑰對生成器對象
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(algorithm);
        // 生成密鑰對
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        // 生成私鑰
        PrivateKey privateKey = keyPair.getPrivate();
        // 生成公鑰
        PublicKey publicKey = keyPair.getPublic();
        // 獲取私鑰字節(jié)數(shù)組
        byte[] privateKeyEncoded = privateKey.getEncoded();
        // 獲取公鑰字節(jié)數(shù)組
        byte[] publicKeyEncoded = publicKey.getEncoded();
        // 對公私鑰進行base64編碼
        String privateKeyString = Base64.encodeBase64String(privateKeyEncoded);
        String publicKeyString = Base64.encodeBase64String(publicKeyEncoded);
        // 打印私鑰
        System.out.println("私鑰:"+privateKeyString);
        // 打印公鑰
        System.out.println("共鑰:"+publicKeyString);
    }
私鑰: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

共鑰:MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAuoaZDELPg9F3n0zREqKM9wmrs/E6ZezWhypt1/Ga6izv0HwqltmaKM5ZFxYu58zcD0AXxL9VY
F4Yk+VTsvq9uC3HN6GpDbUll2LgaF62iV3aROxKlSnT0mW8c09zoUkNEKl9xdmNfXrs+UQfIw/RgRCflR05wSiKboF+Iqwlo9U2CmwfFxmx/OcHFhuLh9pJ+
NQ6jPCD8PU0w6TKMluwRB0obpTkvuxtTXe667Wn9LQspPW1XZrPTrvicylkXwkBcbhB9bFr4o1uEfNzkGH6RmtpLyYIlED9DvU0ApqdPiJlok4Vn2G4qqxci
VcpyA5KPJhV11qJZnX6tZsrjYNdurFHtcD5mYbSAufeYafeuSvG8E4koPMHrklzpAFyewq+DiwjopkqweKnS7nqowITHEFrh12xmQqp627ThZs8cUTR/E1o4
cj77V5XX+2ytAkGkrhNpHwIu2CsAcMyPIgG1aJmIexHVbzB6v2JcBD4PA6nLgCTg2qnJ2bMu6JirmVnAgMBAAE=

3 私鑰加密

public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeyException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException {
        String input = "國泰民安";
        // 加密算法
        String algorithm = "RSA";
        //  創(chuàng)建密鑰對生成器對象
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(algorithm);
        // 生成密鑰對
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        // 生成私鑰
        PrivateKey privateKey = keyPair.getPrivate();
        // 生成公鑰
        PublicKey publicKey = keyPair.getPublic();

        // 創(chuàng)建加密對象
        // 參數(shù)表示加密算法
        Cipher cipher = Cipher.getInstance(algorithm);
        // 初始化加密
        // 第一個參數(shù):加密的模式
        // 第二個參數(shù):使用私鑰進行加密
        cipher.init(Cipher.ENCRYPT_MODE,privateKey);
        // 私鑰加密
        byte[] bytes = cipher.doFinal(input.getBytes());
        System.out.println(Base64.encodeBase64String(bytes));
    }
gjfiD1F+DOFk2IHqrTWSKe+8qGLCihNuu+RrZY6CKji0H56RUhSL3P5fW2X3FXpCrY+CMsGg16HfmR3boeX1qY4e0NJU0JtE1Ch4uERigH1eM/MUCUaFaVI4
9roDAcqbz0v+lnsX41mOCQ4YSd742XoIg7cJX1GcsHhkXDF3JCM/fDxdHYR63ApmSpzr+qfoelntnc+Xah90i3UR/PPiEZ6/6JWz7mU5DK/X5IVnqgGObNCl
syH7tWcwl34IcrszFvK4ovtxeYVQken7IHgW8LMCxWGXWyDThC+9A/d9AV9vlLLuzZcYEvRYMS5BzZqr9gzdrgYE1hsRouFQ0yyuOUoVAbaqAjqhPRTTIj0E
QUl2PpB7hi561x/j/58w9dsoI3gKp/G6SBl40yyuxbm5z/RGYxjeZhyIC4Lm/ddpCQpJ5qzZ/WX6N9fSqjwQLaHSQpgmsy5zdZRkZchxknw8LgONSzObwA5/
F561oXgtHWD44+SzZHoOGY3hDSU3oKMT

4 私鑰加密 公鑰解密

  • 私鑰加密,只能公鑰解密
public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeyException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException {
        String input = "國泰民安";
        System.out.println(input);
        // 加密算法
        String algorithm = "RSA";
        //  創(chuàng)建密鑰對生成器對象
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(algorithm);
        // 生成密鑰對
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        // 生成私鑰
        PrivateKey privateKey = keyPair.getPrivate();
        // 生成公鑰
        PublicKey publicKey = keyPair.getPublic();

        // 創(chuàng)建加密對象
        // 參數(shù)表示加密算法
        Cipher cipher = Cipher.getInstance(algorithm);
        // 初始化加密
        // 第一個參數(shù):加密的模式
        // 第二個參數(shù):使用私鑰進行加密
        cipher.init(Cipher.ENCRYPT_MODE,privateKey);
        // 私鑰加密
        byte[] bytes = cipher.doFinal(input.getBytes());
        System.out.println(Base64.encodeBase64String(bytes));

        // 私鑰進行解密
        cipher.init(Cipher.DECRYPT_MODE,publicKey);
        // 對密文進行解密,不需要使用base64,因為原文不會亂碼
        byte[] bytes1 = cipher.doFinal(bytes);
        System.out.println(new String(bytes1));
    }
國泰民安
VfUXV9TiXxeRx5/gq13GtsNm76BSw/63e1SaOI1szLnb9DjE4hfCmim0qqqOQYSp5fyE45694Dlj37p7/+eu7gMAuJN5PYZfN7bYQZ+ZIJeXCiEO/IWXFzQW
yIgoyqUjZ1i6ja0yfHhY0FXkBBJCr2SNwBiMW1lEQav0UE/i05Dj3+OOKDTKNbIgMLcsZfM3WPSNJWJq7bthnjO0KTPSdG5Dl+/eJictaSGTk0it5+D1l4G6
N8CfTfshG9c3vWbfmqgmU8GaA5Iqo1eHINPpS9SZOoAAokGEzmDkx2VJQiQO3GELIdcCGvyWvZIm7PlAV8EYzxTQiHRSuwiCJyGGABC+I9iEFwDaZwYCTAh7
roSwtpt1ax/KgQfbhv8vNE+/3ADnnvFgzDX6LfWuSl0vhclh9kl0ECnIICJd6dxKwCAZkctiwdOoPrbGnK4lWXbeTbdkxBpdw9LcnWMkCuCVy53k47OjB3S+
t+Uktr2snJAjJDYG4ZZmrQpEIj17zLKZ
國泰民安

5 公鑰和私鑰的保存和讀取

5.1 保存公鑰和私鑰

public static void main(String[] args) throws Exception {
        String input = "硅谷";
        // 加密算法
        String algorithm = "RSA";

        //生成密鑰對并保存在本地文件中
        generateKeyToFile(algorithm, "a.pub", "a.pri");


    }

    /**
     * 生成密鑰對并保存在本地文件中
     *
     * @param algorithm : 算法
     * @param pubPath   : 公鑰保存路徑
     * @param priPath   : 私鑰保存路徑
     * @throws Exception
     */
    private static void generateKeyToFile(String algorithm, String pubPath, String priPath) throws Exception {
        // 獲取密鑰對生成器
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(algorithm);
        // 獲取密鑰對
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        // 獲取公鑰
        PublicKey publicKey = keyPair.getPublic();
        // 獲取私鑰
        PrivateKey privateKey = keyPair.getPrivate();
        // 獲取byte數(shù)組
        byte[] publicKeyEncoded = publicKey.getEncoded();
        byte[] privateKeyEncoded = privateKey.getEncoded();
        // 進行Base64編碼
        String publicKeyString = Base64.encodeBase64String(publicKeyEncoded);
        String privateKeyString = Base64.encodeBase64String(privateKeyEncoded);
        // 保存文件
        FileUtils.writeStringToFile(new File(pubPath), publicKeyString, Charset.forName("UTF-8"));
        FileUtils.writeStringToFile(new File(priPath), privateKeyString, Charset.forName("UTF-8"));

    }

5.2 讀取公鑰和私鑰

public static void main(String[] args) throws Exception {
        String input = "明德新民,止于至善";
        // 加密算法
        String algorithm = "RSA";

        //生成密鑰對并保存在本地文件中
        generateKeyToFile(algorithm, "a.pub", "a.pri");
        //讀取私鑰
        PrivateKey privateKey = getPrivateKey("a.pri", algorithm);
        //讀取公鑰
        PublicKey publicKey = getPublicKey("a.pub", algorithm);

        String s = encryptRSA(algorithm, privateKey, input);
        String res = decryptRSA(algorithm, publicKey, s);
        System.out.println(res);
    }

    /**
     * 解密數(shù)據(jù)
     *
     * @param algorithm      : 算法
     * @param encrypted      : 密文
     * @param key            : 密鑰
     * @return : 原文
     */
    public static String decryptRSA(String algorithm,Key key,String encrypted) throws Exception{
        // 創(chuàng)建加密對象
        // 參數(shù)表示加密算法
        Cipher cipher = Cipher.getInstance(algorithm);
        // 私鑰進行解密
        cipher.init(Cipher.DECRYPT_MODE,key);
        // 由于密文進行了Base64編碼, 在這里需要進行解碼
        byte[] decode = Base64.decodeBase64(encrypted);
        // 對密文進行解密,不需要使用base64,因為原文不會亂碼
        byte[] bytes1 = cipher.doFinal(decode);
        return new String(bytes1);

    }
    /**
     * 使用密鑰加密數(shù)據(jù)
     *
     * @param algorithm      : 算法
     * @param input          : 原文
     * @param key            : 密鑰
     * @return : 密文
     */
    public static String encryptRSA(String algorithm,Key key,String input) throws Exception{
        // 創(chuàng)建加密對象
        // 參數(shù)表示加密算法
        Cipher cipher = Cipher.getInstance(algorithm);
        // 初始化加密
        // 第一個參數(shù):加密的模式
        // 第二個參數(shù):使用私鑰進行加密
        cipher.init(Cipher.ENCRYPT_MODE,key);
        // 私鑰加密
        byte[] bytes = cipher.doFinal(input.getBytes());
        // 對密文進行Base64編碼
        return Base64.encodeBase64String(bytes);
    }

    public static PublicKey getPublicKey(String pulickPath,String algorithm) throws Exception{
        // 將文件內容轉為字符串
        String publicKeyString = FileUtils.readFileToString(new File(pulickPath), Charset.defaultCharset());
        // 獲取密鑰工廠
        KeyFactory keyFactory = KeyFactory.getInstance(algorithm);
        // 構建密鑰規(guī)范 進行Base64解碼
        X509EncodedKeySpec spec = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyString));
        // 生成公鑰
        return keyFactory.generatePublic(spec);
    }

    /**
     * 生成密鑰對并保存在本地文件中
     *
     * @param algorithm : 算法
     * @param pubPath   : 公鑰保存路徑
     * @param priPath   : 私鑰保存路徑
     * @throws Exception
     */
    private static void generateKeyToFile(String algorithm, String pubPath, String priPath) throws Exception {
        // 獲取密鑰對生成器
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(algorithm);
        // 獲取密鑰對
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        // 獲取公鑰
        PublicKey publicKey = keyPair.getPublic();
        // 獲取私鑰
        PrivateKey privateKey = keyPair.getPrivate();
        // 獲取byte數(shù)組
        byte[] publicKeyEncoded = publicKey.getEncoded();
        byte[] privateKeyEncoded = privateKey.getEncoded();
        // 進行Base64編碼
        String publicKeyString = Base64.encodeBase64String(publicKeyEncoded);
        String privateKeyString = Base64.encodeBase64String(privateKeyEncoded);
        // 保存文件
        FileUtils.writeStringToFile(new File(pubPath), publicKeyString, Charset.forName("UTF-8"));
        FileUtils.writeStringToFile(new File(priPath), privateKeyString, Charset.forName("UTF-8"));

    }

    public static PrivateKey getPrivateKey(String priPath,String algorithm) throws Exception{
        // 將文件內容轉為字符串
        String privateKeyString = FileUtils.readFileToString(new File(priPath), Charset.defaultCharset());
        // 獲取密鑰工廠
        KeyFactory keyFactory = KeyFactory.getInstance(algorithm);
        // 構建密鑰規(guī)范 進行Base64解碼
        PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyString));
        // 生成私鑰
        return keyFactory.generatePrivate(spec);
    }

密碼學【java】初探究加密方式之非對稱加密文章來源地址http://www.zghlxwxcb.cn/news/detail-435377.html

到了這里,關于密碼學【java】初探究加密方式之非對稱加密的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【密碼學-1】一文入門非對稱密碼學

    【密碼學-1】一文入門非對稱密碼學

    本文共1932字,完成閱讀約需6分鐘。 猶記得2021年年初的一波區(qū)塊鏈熱潮讓無數(shù)人第一次了解到了“公鑰”和“私鑰”的概念,那么,究竟什么是公鑰私鑰呢?和常見的密鑰又有什么區(qū)別和聯(lián)系呢?本文目的在用盡可能短的時間和簡潔的語言,帶你快速了解非對稱密碼學的基本

    2023年04月08日
    瀏覽(46)
  • 密碼學:公鑰密碼.(非對稱密碼)

    密碼學:公鑰密碼.(非對稱密碼)

    公鑰密碼 (Public Key Cryptography),又稱為 非對稱密碼 ,其最大特征是 加密和解密不再使用相同的密鑰 ,而使用不同的密鑰。使用者會將一個密鑰公開,而將另一個密鑰私人持有,這時這兩個密鑰被稱為 公鑰和私鑰 。一般來說,公鑰和私鑰是難以互相計算的,但它們可以互相

    2024年02月03日
    瀏覽(22)
  • 【密碼學】Java課設-文件加密系統(tǒng)(適用于任何文件)

    【密碼學】Java課設-文件加密系統(tǒng)(適用于任何文件)

    文檔顯示亂碼相信大家一定不陌生,一份很喜歡的文檔內容/數(shù)據(jù),下載到自己電腦上卻是這樣的 項目中一些核心程序打開是這樣的 文件加密,不僅可以提高數(shù)據(jù)安全性,還可以在很大程度上保護個人權益/財產(chǎn)不被侵犯。 本篇文章采用的是對稱加密方式,效果如下。 常見的

    2024年02月04日
    瀏覽(24)
  • 對稱密鑰【密碼學】(四)

    對稱密鑰【密碼學】(四)

    在使用單向散列函數(shù)校驗數(shù)據(jù)完整性時,需要保證原始的散列值不能被更改。 因此,在很多場景下,我們并不能僅僅通過單向散列函數(shù)來解決完整性問題,還需要其他技術來解決這個問題,如加密技術。 本篇博客就來介紹一下第一類加密技術------對稱加密技術 加密數(shù)據(jù)的安

    2024年02月10日
    瀏覽(160)
  • 密碼學【第三節(jié):對稱密碼-DES\AES】

    密碼學【第三節(jié):對稱密碼-DES\AES】

    對稱加密 ????對稱加密算法中,數(shù)據(jù)發(fā)送方將明文和密鑰一起經(jīng)過特殊加密算法處理成密文后,將它發(fā)送出去。接收方收到密文后,若想解讀原文,則需要使用加密用到的相同密鑰及相同算法的逆算法對密文進行解密,才能使其恢復成原文。 ????它的最大優(yōu)勢是加

    2024年02月07日
    瀏覽(24)
  • 【密碼學】塊加密(分組加密)的工作模式

    【密碼學】塊加密(分組加密)的工作模式

    上一篇文章討論了 DES 算法,現(xiàn)在我們有了“給定 64-bit 的明文、64-bit 的密鑰,輸出 64-bit 的密文”的加密手段。這離實際應用還有一點點距離,因為要傳遞的信息當然不止 64 位。 要用 DES 加密一條信息,一般先把信息填充到 64 的倍數(shù),于是就可以分成許多組,每組 8 個字節(jié)

    2024年02月16日
    瀏覽(24)
  • 【密碼學基礎】RSA加密算法

    【密碼學基礎】RSA加密算法

    RSA是一種非對稱加密算法,即加密和解密時用到的密鑰不同。 加密密鑰是公鑰,可以公開;解密密鑰是私鑰,必須保密保存。 基于一個簡單的數(shù)論事實:兩個大質數(shù)相乘很容易,但想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰,即公鑰;而兩個

    2024年02月01日
    瀏覽(94)
  • 密碼學—Vigenere加密Python程序

    密碼學—Vigenere加密Python程序

    古典密碼,屬于多表加密。 怎么就是多表了? 維吉尼亞密碼的加密算法實質是凱撒密碼,因為他是先分好小組,然后用密鑰串對應著分好組的每一個字母進行加密(因為一個凱撒表用密鑰串的一個字母加密),當然是遵循下標相同的,比如秘鑰為:abc,明文為qwer,然后明文

    2024年02月11日
    瀏覽(26)
  • 密碼學——古典密碼中的基本加密運算附簡單例題

    本篇文章將對古典密碼中使用到的基本加解密運算進行總結,并展示個別加減密運算的簡單例題,從而使讀者更加容易理解古典密碼中的基本加減密運算的原理。 首先引入密碼學中的幾個基本定義: M:明文空間,明文的集合 C:密文空間,密文的集合 K:密鑰空間(也稱密鑰

    2024年02月12日
    瀏覽(49)
  • 【密碼學復習】第七章 公鑰加密體制(二)

    【密碼學復習】第七章 公鑰加密體制(二)

    RSA單向陷門函數(shù)及其應用 ElGamal單向陷門函數(shù) 1)密鑰生成 ① 選擇一大素數(shù) p ,選取Z p * 的生成元 g ; ② 任選 小于 p 的隨機數(shù) x ,計算 y ≡ g x mod p ; ③ ( y , g , p )為公開密鑰, ( x , g , p )為秘密密鑰. 2)加密: 設待加密明文為 M . ① 隨機選一整數(shù) k ,0 k = p -1; ② 計算密文對

    2024年02月05日
    瀏覽(96)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包