java實現非對稱加密

對稱加密:加密和解密的過程使用的是相同的密鑰

這裏寫圖片描述

非對稱加密

與對稱加密不同,非對稱加密算法的加密和解密使用不同的兩個密鑰.這兩個密鑰就是我們經常聽到的”公開密鑰”(公鑰)和”私有密鑰”(私鑰).

公鑰和私鑰的關係是:

公鑰和私鑰一般都是成對出現,
如果你的消息使用公鑰加密,那麼需要該公鑰對應的私鑰才能解密;
如果你的消息使用私鑰加密,那麼需要該私鑰對應的公鑰才能解密.
這裏寫圖片描述

java實現非對稱加密

    public static void main(String[] args) throws Exception {
        //原文
        String txt = "abc";
        System.out.println("需要加密的原始數據"+txt);

        System.out.println();

        //獲得密鑰對Map
        Map<String, byte[]> keyMap = getKeyMap();
        //獲得公鑰
        String publicKeyStr = encryptBASE64(keyMap.get(PUBLIC_KEY));
        System.out.println("公鑰\n\r"+publicKeyStr);

        //獲得密鑰
        String privateKeyStr = encryptBASE64(keyMap.get(PRIVATE_KEY));
        System.out.println("私鑰\n\r"+privateKeyStr);

        //將私鑰規範
        PrivateKey privateKey = restorePrivateKey(decryptBASE64(privateKeyStr));

        //將原文更利於私鑰加密
        byte[] encodedText = RSAEncode(privateKey, txt.getBytes("UTF-8"));

        //私鑰加密後的數據
        String privateResult = byteArrayToHexString(encodedText);
        System.out.println("加密後的256位數據\n\r"+privateResult);

        PublicKey publicKey = restorePublicKey(decryptBASE64(publicKeyStr));
        // 公鑰解密
        System.out.println("公鑰解密: " + RSADecode(publicKey, hexStringToByte(privateResult)));
    }

運行結果圖
這裏寫圖片描述

具體的代碼
https://github.com/liaobaoxin/password/blob/master/src/com/lbx/password/Cryptology.java

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章