java實(shí)現(xiàn)RSA+AES的簡(jiǎn)單加密解密

TestAesAndRsa

package com.zhuyun.test;
 
import java.security.KeyPair;
import java.security.PrivateKey;
import java.security.PublicKey;
 
import javax.crypto.SecretKey;
 
import org.junit.Test;
 
import com.zhuyun.aes.AESUtil;
import com.zhuyun.rsa.RSAUtil;
 
public class TestAesAndRsa {
 
    //測(cè)試RSA與AES的結(jié)合谦秧。
    //                  客戶端用公鑰加密AES秘鑰追驴,AES秘鑰加密實(shí)際內(nèi)容;
    //                  服務(wù)端用私鑰解密AES秘鑰,AES秘鑰解密實(shí)際內(nèi)容
    @Test
    public void testAesAndRsa() throws Exception {
        //===============生成公鑰和私鑰酷誓,公鑰傳給客戶端,私鑰服務(wù)端保留==================
        //生成RSA公鑰和私鑰,并Base64編碼裸准,生成一次以后,就寫死在配置文件或代碼中赔硫,下次不再重新生成
        KeyPair keyPair = RSAUtil.getKeyPair();
        String publicKeyStr = RSAUtil.getPublicKey(keyPair);
        String privateKeyStr = RSAUtil.getPrivateKey(keyPair);
        System.out.println("RSA公鑰Base64編碼:" + publicKeyStr);
        System.out.println("RSA私鑰Base64編碼:" + publicKeyStr);
        
        //=================客戶端=================
        //hello, i am infi, good night!  需要加密的實(shí)際內(nèi)容
        String message = "hello, i am infi, good night!";
        //將Base64編碼后的公鑰轉(zhuǎn)換成PublicKey對(duì)象
        PublicKey publicKey = RSAUtil.string2PublicKey(publicKeyStr);
        //生成AES秘鑰炒俱,并Base64編碼
        String aesKeyStr = AESUtil.genKeyAES();
        System.out.println("AES秘鑰Base64編碼:" + aesKeyStr);
        //用公鑰加密AES秘鑰
        byte[] publicEncrypt = RSAUtil.publicEncrypt(aesKeyStr.getBytes(), publicKey);
        //公鑰加密AES秘鑰后的內(nèi)容Base64編碼
        String publicEncryptStr = RSAUtil.byte2Base64(publicEncrypt);
        System.out.println("公鑰加密AES秘鑰并Base64編碼的結(jié)果:" + publicEncryptStr);
        
        //將Base64編碼后的AES秘鑰轉(zhuǎn)換成SecretKey對(duì)象
        SecretKey aesKey = AESUtil.loadKeyAES(aesKeyStr);
        //用AES秘鑰加密實(shí)際的內(nèi)容
        byte[] encryptAES = AESUtil.encryptAES(message.getBytes(), aesKey);
        //AES秘鑰加密后的內(nèi)容Base64編碼
        String encryptAESStr = AESUtil.byte2Base64(encryptAES);
        System.out.println("AES秘鑰加密實(shí)際的內(nèi)容并Base64編碼的結(jié)果:" + encryptAESStr);
        
        
        //##############    網(wǎng)絡(luò)上傳輸?shù)膬?nèi)容有Base64編碼后的公鑰加密AES秘鑰的結(jié)果 和 Base64編碼后的AES秘鑰加密實(shí)際內(nèi)容的結(jié)果   #################
        //##############    即publicEncryptStr和encryptAESStr ###################
        
        
        //===================服務(wù)端================
        //將Base64編碼后的私鑰轉(zhuǎn)換成PrivateKey對(duì)象
        PrivateKey privateKey = RSAUtil.string2PrivateKey(privateKeyStr);
        //公鑰加密AES秘鑰后的內(nèi)容(Base64編碼),進(jìn)行Base64解碼
        byte[] publicEncrypt2 = RSAUtil.base642Byte(publicEncryptStr);
        //用私鑰解密,得到aesKey
        byte[] aesKeyStrBytes = RSAUtil.privateDecrypt(publicEncrypt2, privateKey);
        //解密后的aesKey
        String aesKeyStr2 = new String(aesKeyStrBytes);
        System.out.println("解密后的aesKey(Base64編碼): " + aesKeyStr2);
        
        //將Base64編碼后的AES秘鑰轉(zhuǎn)換成SecretKey對(duì)象
        SecretKey aesKey2 = AESUtil.loadKeyAES(aesKeyStr2);
        //AES秘鑰加密后的內(nèi)容(Base64編碼)爪膊,進(jìn)行Base64解碼
        byte[] encryptAES2 = AESUtil.base642Byte(encryptAESStr);
        //用AES秘鑰解密實(shí)際的內(nèi)容
        byte[] decryptAES = AESUtil.decryptAES(encryptAES2, aesKey2);
        //解密后的實(shí)際內(nèi)容
        System.out.println("解密后的實(shí)際內(nèi)容: " + new String(decryptAES));
        
    }
 
}

關(guān)于RSAUtil 和AESUtil這兩個(gè)類权悟,詳見(jiàn)我的前面兩篇博客《java實(shí)現(xiàn)RSA的簡(jiǎn)單加密解密》和 《java實(shí)現(xiàn)AES的簡(jiǎn)單加密解密》

運(yùn)行結(jié)果如下:

RSA公鑰Base64編碼:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3edVb1wjqKNucCPW7/0Ct4lFBVdEVZyD
tT+cbzncvnHokEzNj2bRUSk0sR4YBUscPyR5H8c5p2MgRcuLLMWzXBpUS4TO+NHfLzzj30WPcqIL
MaO6nIMCqH6zn3Bz0my56Gx7hHUI+D7ija/JtroLQiI9Z69pljtxjEfX7Oa7EgDWc0uhPh+grhHD
LCsdibn5Czpc+GkkRYOV9iPIaia3+h2Eqyj9WOOxd6czsgGEjO8+g28Kl7CLKzwE1RUYEZmu+Tch
U2417ejpAjyhR/2rdE1l9US75Tz0/6RFDCTTo13ZLsN/PSVfyZtZ0CLjsCAjimDq2GR1qVU0K7XE
SBrDuwIDAQAB
RSA私鑰Base64編碼:MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDd51VvXCOoo25wI9bv/QK3iUUF
V0RVnIO1P5xvOdy+ceiQTM2PZtFRKTSxHhgFSxw/JHkfxzmnYyBFy4ssxbNcGlRLhM740d8vPOPf
RY9yogsxo7qcgwKofrOfcHPSbLnobHuEdQj4PuKNr8m2ugtCIj1nr2mWO3GMR9fs5rsSANZzS6E+
H6CuEcMsKx2JufkLOlz4aSRFg5X2I8hqJrf6HYSrKP1Y47F3pzOyAYSM7z6DbwqXsIsrPATVFRgR
ma75NyFTbjXt6OkCPKFH/at0TWX1RLvlPPT/pEUMJNOjXdkuw389JV/Jm1nQIuOwICOKYOrYZHWp
VTQrtcRIGsO7AgMBAAECggEBALQYHQGtMQ+b3HTM0ZOir0LP+KF2CvLEfSxrvQWUW3CBODNs8eQx
mS4amDYra2lYZUtlyZwd78/HJpkesgybQ487mzBTUDsm8dD/xR0e8mYh153o+PovZcfkVNnQxV+B
eHyHFtQQvD/loa9GfRp88cgxy85L0hDom6YzZK5TMH5RhtalPiX3bLCk6y3j2ZBqfDIzwt8ajnK8
H9/Ka5ICz0Qx1BFvVDig5GqGyH7+omRDWBMpmqPbr0RrCjj6whhlQpxZC4f/YePwy8LN9Q05n+1q
QxICYIw4XNntnu7doiE4uWPe1tW1tZRN+d+702WNlhhpqffO5uJjySjg+PK68pECgYEA8EvimOcH
sxGqkYQv5gR8rfeTdOUG9mOJgK8uoR5sDZdSpgrkgXW6mt3AiwjJr+6BtHN6QdHRUsA7HYXlmuJn
qONFCWMJCCRC4Ko6pxHDzRez6jclonNAGIh6DwY//6VLOvYOFq2xM7F8LTA++G5VfZbrU0uJyq1b
GfRgOj8QgakCgYEA7Ge9pEk5cWLthr8fSJOYsI5cOi/DjIPYhhXUZPGbti/7G/xs58a9Mcm2b+DE
90D+cElAgjAM8E8J0uWt5KO8fVq4fKuvVWvgvkmloqg+TPg7jM7voDd7JR8burOLiqvqQ0Cic4u9
hrMJM7XzKUQlLtVdWg1KVh1j/H9RLe9IAMMCgYEArKT44v5qS7/PmsksWMi0g5EzAnNiczfEnQ5A
JEZlP8aO/Pkqf9EEByx3n+zqa1qjGfE1z4BeMmQmlOmUs5ki/PZ8rWfYH19eJWhox4w972auPwLs
KTFAxd+YQp8s8BHkYTJToPueKxPDsfvN4lPzXE5IOQo2r8WphJZNZMvWojECgYAOl1SYKEDYY7+/
WlqG8z0wYIkGul36dUTO+dfzJwpyU0HPd2QNZjHVOdr9ysS9chCCQ7MsleSmjGpRzwVNoGGI5ymN
4FbhEdh8RjVn9bRqscOTLE6T9/is0N+4RU6uj2/VGM8uDIj1IGXIAEny2Rbmbhrl7P4SlJvQQNd0
21j5WwKBgQCbO0pumh5n/6dBP66FMsp2+v7pDFUO14yipDY0KiVRrsb7UdkdOxcQPrmf9flOfBaT
iAI8hu6PlEknb6nEw4+kYJN0rf4ENHaYhilDoJruLoPAtE9JkP0rEKNr7YfC/ZmmEFQitmHt7aoK
ThTTxQArD8YZ/5YLENp5ECxgWifPYA==
AES秘鑰Base64編碼:3aNZH0W9NAeFAJx66rf/Pw==
公鑰加密AES秘鑰并Base64編碼的結(jié)果:A17kkwTbz7p7UP6Z56cau3f0OoF+yZCngbJTQDUUsGwdj89alHIKg05tT7t4Nh8hq7l/1KkhNw6Y
RWiQ3LmoU55H82xzZWpj19YzqDCNyceIJKO7YafYI40uqiBrzSX9ruwrNMlv9AQi8RYKcXzX/89E
BJuSHSOttfgoXaEOmqgNDNAeipqMxHMCrqi4D6ST32WpttKlYm9NsxgqDuUfLrXQRoPusUfPk1ZI
N4mVvHX39n+WuOfMLjo2BGXddyDj8p6I3dD2v7OiLC5wiB6LYlB6yftX2xLdy077FpkJW6yyki2Y
O+mktov3ZSRflgBn5mjnGagJeqw5PXj4F3uo0w==
AES秘鑰加密實(shí)際的內(nèi)容并Base64編碼的結(jié)果:z307ajQDSY6zC9WyPMOZiUvPyRZWUbJv2k44Ee3/kiQ=
解密后的aesKey(Base64編碼): 3aNZH0W9NAeFAJx66rf/Pw==
解密后的實(shí)際內(nèi)容: hello, i am infi, good night!
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市推盛,隨后出現(xiàn)的幾起案子峦阁,更是在濱河造成了極大的恐慌,老刑警劉巖耘成,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件榔昔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡瘪菌,警方通過(guò)查閱死者的電腦和手機(jī)撒会,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)师妙,“玉大人茧彤,你說(shuō)我怎么就攤上這事〗福” “怎么了曾掂?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)壁顶。 經(jīng)常有香客問(wèn)我珠洗,道長(zhǎng),這世上最難降的妖魔是什么若专? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任许蓖,我火速辦了婚禮,結(jié)果婚禮上调衰,老公的妹妹穿的比我還像新娘膊爪。我一直安慰自己,他們只是感情好嚎莉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布米酬。 她就那樣靜靜地躺著,像睡著了一般趋箩。 火紅的嫁衣襯著肌膚如雪赃额。 梳的紋絲不亂的頭發(fā)上加派,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音跳芳,去河邊找鬼芍锦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛飞盆,可吹牛的內(nèi)容都是我干的娄琉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼吓歇,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼车胡!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起照瘾,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤匈棘,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后析命,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體主卫,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年鹃愤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了簇搅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡软吐,死狀恐怖瘩将,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情凹耙,我是刑警寧澤姿现,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站肖抱,受9級(jí)特大地震影響备典,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜意述,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一提佣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧荤崇,春花似錦拌屏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至喜每,卻和暖如春务唐,著一層夾襖步出監(jiān)牢的瞬間雳攘,已是汗流浹背带兜。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工枫笛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人刚照。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓刑巧,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親无畔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子啊楚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

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