国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用Hutool處理RSA等非對稱加密

bang590 / 1718人閱讀

摘要:此文主要介紹利用簡化非對稱加密解密。對于非對稱加密,最常用的就是和,在中使用對象來負責加密解密。用于向公鑰所有者發布信息這個信息可能被他人篡改但是無法被他人獲得。

介紹

Hutool工具是一個國產開源Java工具集,旨在簡化Java開發中繁瑣的過程,Hutool-crypto模塊便是針對JDK加密解密做了大大簡化。

此文主要介紹利用Hutool-crypto簡化非對稱加密解密。

對于非對稱加密,最常用的就是RSA和DSA,在Hutool中使用AsymmetricCrypto對象來負責加密解密。

非對稱加密有公鑰和私鑰兩個概念,私鑰自己擁有,不能給別人,公鑰公開。根據應用的不同,我們可以選擇使用不同的密鑰加密:

簽名:使用私鑰加密,公鑰解密。用于讓所有公鑰所有者驗證私鑰所有者的身份并且用來防止私鑰所有者發布的內容被篡改,但是不用來保證內容不被他人獲得。

加密:用公鑰加密,私鑰解密。用于向公鑰所有者發布信息,這個信息可能被他人篡改,但是無法被他人獲得。

使用 引入Hutool

    com.xiaoleilu
    hutool-all
    3.1.0

在非對稱加密中,我們可以通過AsymmetricCrypto(AsymmetricAlgorithm algorithm)構造方法,通過傳入不同的算法枚舉,獲得其加密解密器。

當然,為了方便,我們針對最常用的RSA和DSA算法構建了多帶帶的對象:RSADSA。

基本使用

我們以RSA為例,介紹使用RSA加密和解密 在構建RSA對象時,可以傳入公鑰或私鑰,當使用無參構造方法時,Hutool將自動生成隨機的公鑰私鑰密鑰對:

RSA rsa = new RSA();

//獲得私鑰
rsa.getPrivateKey()
rsa.getPrivateKeyBase64()
//獲得公鑰
rsa.getPublicKey()
rsa.getPublicKeyBase64()

//公鑰加密,私鑰解密
byte[] encrypt = rsa.encrypt(StrUtil.bytes("我是一段測試aaaa", CharsetUtil.CHARSET_UTF_8), KeyType.PublicKey);
byte[] decrypt = rsa.decrypt(encrypt, KeyType.PrivateKey);
Assert.assertEquals("我是一段測試aaaa", StrUtil.str(decrypt, CharsetUtil.CHARSET_UTF_8));

//私鑰加密,公鑰解密
byte[] encrypt2 = rsa.encrypt(StrUtil.bytes("我是一段測試aaaa", CharsetUtil.CHARSET_UTF_8), KeyType.PrivateKey);
byte[] decrypt2 = rsa.decrypt(encrypt2, KeyType.PublicKey);
Assert.assertEquals("我是一段測試aaaa", StrUtil.str(decrypt2, CharsetUtil.CHARSET_UTF_8));

對于加密和解密可以完全分開,對于RSA對象,如果只使用公鑰或私鑰,另一個參數可以為null

自助生成密鑰對

有時候我們想自助生成密鑰對可以:

KeyPair pair = SecureUtil.generateKeyPair("RSA");
pair.getPrivate();
pair.getPublic();

自助生成的密鑰對是byte[]形式,我們可以使用Base64.encode方法轉為Base64,便于存儲為文本。

當然,如果使用RSA對象,也可以使用encryptStrdecryptStr加密解密為字符串

案例 案例一:

已知私鑰和密文,如何解密密文?

String PRIVATE_KEY = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAIL7pbQ+5KKGYRhw7jE31hmA"
        + "f8Q60ybd+xZuRmuO5kOFBRqXGxKTQ9TfQI+aMW+0lw/kibKzaD/EKV91107xE384qOy6IcuBfaR5lv39OcoqNZ"
        + "5l+Dah5ABGnVkBP9fKOFhPgghBknTRo0/rZFGI6Q1UHXb+4atP++LNFlDymJcPAgMBAAECgYBammGb1alndta"
        + "xBmTtLLdveoBmp14p04D8mhkiC33iFKBcLUvvxGg2Vpuc+cbagyu/NZG+R/WDrlgEDUp6861M5BeFN0L9O4hz"
        + "GAEn8xyTE96f8sh4VlRmBOvVdwZqRO+ilkOM96+KL88A9RKdp8V2tna7TM6oI3LHDyf/JBoXaQJBAMcVN7fKlYP"
        + "Skzfh/yZzW2fmC0ZNg/qaW8Oa/wfDxlWjgnS0p/EKWZ8BxjR/d199L3i/KMaGdfpaWbYZLvYENqUCQQCobjsuCW"
        + "nlZhcWajjzpsSuy8/bICVEpUax1fUZ58Mq69CQXfaZemD9Ar4omzuEAAs2/uee3kt3AvCBaeq05NyjAkBme8SwB0iK"
        + "kLcaeGuJlq7CQIkjSrobIqUEf+CzVZPe+AorG+isS+Cw2w/2bHu+G0p5xSYvdH59P0+ZT0N+f9LFAkA6v3Ae56OrI"
        + "wfMhrJksfeKbIaMjNLS9b8JynIaXg9iCiyOHmgkMl5gAbPoH/ULXqSKwzBw5mJ2GW1gBlyaSfV3AkA/RJC+adIjsRGg"
        + "JOkiRjSmPpGv3FOhl9fsBPjupZBEIuoMWOC8GXK/73DHxwmfNmN7C9+sIi4RBcjEeQ5F5FHZ";

RSA rsa = new RSA(PRIVATE_KEY, null);

String a = "2707F9FD4288CEF302C972058712F24A5F3EC62C5A14AD2FC59DAB93503AA0FA17113A020EE4EA35EB53F"
        + "75F36564BA1DABAA20F3B90FD39315C30E68FE8A1803B36C29029B23EB612C06ACF3A34BE815074F5EB5AA3A"
        + "C0C8832EC42DA725B4E1C38EF4EA1B85904F8B10B2D62EA782B813229F9090E6F7394E42E6F44494BB8";

byte[] aByte = HexUtil.decodeHex(a);
byte[] decrypt = rsa.decrypt(aByte, KeyType.PrivateKey);
Assert.assertEquals("虎頭闖杭州,多抬頭看天,切勿只管種地", StrUtil.str(decrypt, CharsetUtil.CHARSET_UTF_8));

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70224.html

相關文章

  • 為你的PHP程序選擇合適的密碼庫(初稿)

    摘要:我們不會提及任何糟糕的密碼庫的。僅對而言如果你一定要安裝對稱密鑰加密,請使用上述的的密碼庫。的密碼庫為你提供了認證加密,而的實施并不會驗證密文。當前的最佳密碼庫之一是內建的。這種散列算法對的編程者或企業來說都是穩定有效的。 如果本文中的術語讓你感到疑惑,請先參閱密碼學術語及概念一文。 密碼學不是魔術。加密一個應用程序并不能保證它在襲擊下的安全(特別是在你沒有設置驗證密文的情況下)。但如...

    岳光 評論0 收藏0
  • Swoole 源碼分析——Server模塊之OpenSSL (上)

    摘要:另一方比如小明得到公鑰之后,雙方就可以通信。然而,中間人還是可能截獲公鑰,然后自己弄一對秘鑰,然后告訴小明說是小紅的公鑰。這樣,小亮在簽署小紅的身份證的時候,可以在小紅身份證后面附上自己的身份證。一般來說,自簽名的根身份證用于公司內部使用。 前言 自從 Lets Encrypt 上線之后,HTTPS 網站數量占比越來越高,相信不久的未來就可以實現全網 HTTPS,大部分主流瀏覽器也對 ...

    ky0ncheng 評論0 收藏0
  • 加密解密算法介紹

    摘要:加密解密算法介紹算法目前常見有加密算法,散列算法,編碼算法,使用位關鍵字作為流加密算法加密技術通常分為兩大類對稱式和非對稱式。對稱性加密算法有用途對稱加密算法用來對敏感數據等信息進行加密數據加密標準,速度較快,適用于加密大量數據的場合。 加密解密算法介紹 算法目前常見有: 加密算法,散列算法,Base64(編碼算法),https(SSL使用40位關鍵字作為RC4流加密算法) 加密技術通...

    ThinkSNS 評論0 收藏0
  • 對稱加密

    摘要:與對稱加密不同的是,非對稱加密和解密使用的是不同的密鑰,其中一個對外公開作為公鑰,另一個只有所有者擁有,稱為私鑰。中提供基于算法的擴展可實現對數據的非對稱加密。 與對稱加密不同的是,非對稱加密和解密使用的是不同的密鑰,其中一個對外公開作為公鑰,另一個只有所有者擁有,稱為私鑰。用私鑰加密的信息只有公鑰才能解開,或者反之用弓腰加密的信息只有私鑰才能解開。常用的非對稱加密有RSA算法,RSA...

    MobService 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<