RSA加解密學習筆記

RSA加解密簡單說明:

RSA是非對稱加密方式,就是說加密解密不是同一個Key丁侄。私鑰加密公鑰解密,待加密的明文字節(jié)長度不能大于密鑰的字節(jié)長度減11(比如1024位的,那么待加密的數(shù)據(jù)長度不能大于117字節(jié))诫咱,待解密數(shù)據(jù)的字節(jié)長度不能大于密鑰的字節(jié)長度(比如1024位的就不能大于128字節(jié))

RSA公鑰私鑰的生成:
//獲取RSA密鑰生成器的實例,還可以是DES/AES等继找,當然這里只需要RSA
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
//初始化密鑰的長度
keyPairGenerator.initialize(2048);
//生成密鑰對
KeyPair keyPair = keyPairGenerator.generateKeyPair();
//獲取私鑰
PrivateKey privateKey = keyPair.getPrivate();
//獲取公鑰
PublicKey publicKey = keyPair.getPublic();
RSA公鑰加密:
//從Base64編碼的字符串生成公鑰
String publicKeyStr = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQ"
byte[] publicKeyBytes = Base64.decodeBase64(publicKeyStr .getBytes());
//這里需要注意一下遂跟,生成公鑰的spec只能是X509EncodedKeySpec或者RSAPublicKeySpec,私鑰只能是PKCS8EncodedKeySpec或者RSAPrivateKeySpec
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyBytes );
PublicKey publicKey = KeyFactory
                .getInstance("RSA")
                .generatePublic(keySpec);
//待加密數(shù)據(jù)
String content = "Hello RSA 77 Hello RSA 77Hello RSA 77Hello RSA 77Hello RSA 77Hello RSA 77Hello RSA 77Hello RSA 77Hello RSA";
byte[] data = Base64.encodeBase64(content.getBytes());
//公鑰加密
Cipher rsa = Cipher.getInstance("RSA");
//初始化加密模式
rsa.init(Cipher.ENCRYPT_MODE, publicKey);
ByteArrayInputStream is = new ByteArrayInputStream(data );
ByteArrayOutputStream os = new ByteArrayOutputStream();
//這里是2048位密鑰婴渡,所以加密最大長度不能超過245字節(jié)
byte[] buffer = new byte[245];
int len;
while ((len = is.read(buffer)) != -1) {
            byte[] doFinal = rsa.doFinal(buffer, 0, len);
            int length = doFinal.length;
            os.write(doFinal);
        }
//加密后的數(shù)據(jù)幻锁,為了防止亂碼,這里將加密數(shù)據(jù)采用Base64編碼
String encryptedData = new String(Base64.encodeBase64(os.toByteArray()));
RSA私鑰解密:
         //從Base64編碼的字符串生成私鑰
        String privateKeyStr = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCDKI2SovlB9CcI/EztKXeiBQ5UMoGA";
        byte[] privateKey_bytes = Base64.decodeBase64(privateKeyStr.getBytes());
        //這里需要注意一下边臼,生成公鑰的spec只能是X509EncodedKeySpec或者RSAPublicKeySpec哄尔,私鑰只能是PKCS8EncodedKeySpec或者RSAPrivateKeySpec
        PKCS8EncodedKeySpec sk_keySpec = new PKCS8EncodedKeySpec(privateKey_bytes);
        PrivateKey privateKey = KeyFactory
                .getInstance("RSA")
                .generatePrivate(sk_keySpec);
        //私鑰解密
        Cipher rsa2 = Cipher.getInstance("RSA");
        rsa2.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] input = Base64.decodeBase64(encryptedData.getBytes());

        ByteArrayInputStream is2 = new ByteArrayInputStream(input);
        ByteArrayOutputStream os2 = new ByteArrayOutputStream();
        byte[] buffer2 = new byte[256];
        int len2;
        while ((len2 = is2.read(buffer2)) != -1) {
            byte[] doFinal = rsa2.doFinal(buffer2, 0, len2);
            os2.write(doFinal);
        }
        //解密后的數(shù)據(jù)
        String decryptData = new String(Base64.decodeBase64(os2.toByteArray()));
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市柠并,隨后出現(xiàn)的幾起案子岭接,更是在濱河造成了極大的恐慌,老刑警劉巖臼予,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸣戴,死亡現(xiàn)場離奇詭異,居然都是意外死亡粘拾,警方通過查閱死者的電腦和手機窄锅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缰雇,“玉大人入偷,你說我怎么就攤上這事追驴。” “怎么了疏之?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵殿雪,是天一觀的道長。 經(jīng)常有香客問我锋爪,道長丙曙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任其骄,我火速辦了婚禮河泳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘年栓。我一直安慰自己拆挥,他們只是感情好,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布某抓。 她就那樣靜靜地躺著纸兔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪否副。 梳的紋絲不亂的頭發(fā)上汉矿,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機與錄音备禀,去河邊找鬼洲拇。 笑死,一個胖子當著我的面吹牛曲尸,可吹牛的內(nèi)容都是我干的赋续。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼另患,長吁一口氣:“原來是場噩夢啊……” “哼纽乱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起昆箕,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤鸦列,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鹏倘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體薯嗤,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年纤泵,在試婚紗的時候發(fā)現(xiàn)自己被綠了骆姐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖诲锹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情涉馅,我是刑警寧澤归园,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站稚矿,受9級特大地震影響庸诱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晤揣,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一桥爽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧昧识,春花似錦钠四、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至甸祭,卻和暖如春缕碎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背池户。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工咏雌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人校焦。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓赊抖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親寨典。 傳聞我的和親對象是個殘疾皇子熏迹,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 本文主要介紹移動端的加解密算法的分類、其優(yōu)缺點特性及應用凝赛,幫助讀者由淺入深地了解和選擇加解密算法注暗。文中會包含算法的...
    蘋果粉閱讀 11,502評論 5 29
  • 姓名:于川皓 學號:16140210089 轉(zhuǎn)載自:https://baike.baidu.com/item/RS...
    道無涯_cc76閱讀 2,547評論 0 1
  • 嘟噥嘟噥:最近接到一個任務:在客戶端動態(tài)生成RSA密鑰對,然后向服務器發(fā)送這個密鑰對中的公鑰字符串墓猎,由服務器進行公...
    TimmyR閱讀 8,029評論 19 21
  • 公鑰密碼系統(tǒng)及RSA公鑰算法 本文簡單介紹了公開密鑰密碼系統(tǒng)的思想和特點捆昏,并具體介紹了RSA算法的理論基礎,工作原...
    火狼o閱讀 4,286評論 2 15
  • 拍高中畢業(yè)照的時候,多么想躺在我們曾經(jīng)經(jīng)常一起喊減肥毙沾、跑步散步的地方,一大片綠幽幽的草地上,仰望著蔚藍干凈的天空,...
    夢若紫羅蘭閱讀 449評論 2 1