資訊加密之非對稱加密演算法RSA

2021-09-09 04:18:01 字數 2862 閱讀 5071

前面為大家已經總結了,基於金鑰交換的dh演算法,現在就為大家再介紹一種基於因子分解的rsa演算法,這種加密演算法有兩種實現形式:1、公鑰加密,私鑰解密;2、私鑰加密,公鑰解密。下面就為大家分析一下實現**,相對於dh演算法,rsa顯得有些簡單。

初始化金鑰:

keypairgenerator keypairgenerator = keypairgenerator.getinstance("rsa");

keypairgenerator.initialize(512);

keypair keypair =keypairgenerator.generatekeypair();

rsaprivatekey rsaprivatekey = (rsaprivatekey)keypair.getprivate();//

私有金鑰

rsapublickey rsapublickey = (rsapublickey)keypair.getpublic();//

公有金鑰

system.out.println("privatekey : "+base64.encodebase64string(rsaprivatekey.getencoded()));

system.out.println("publickey : "+base64.encodebase64string(rsapublickey.getencoded()));

1、私鑰加密,公鑰解密:

//

私鑰加密,公鑰解密--加密

pkcs8encodedkeyspec pkcs8encodedkeyspec = new

pkcs8encodedkeyspec(rsaprivatekey.getencoded());

keyfactory privatekeyfactory = keyfactory.getinstance("rsa");

privatekey privatekey =privatekeyfactory.generateprivate(pkcs8encodedkeyspec);

cipher privatecipher = cipher.getinstance("rsa");

privatecipher.init(cipher.encrypt_mode, privatekey);

byte result =privatecipher.dofinal(src.getbytes());

system.out.println("私鑰加密,公鑰解密--加密:"+base64.encodebase64string(result));

//私鑰加密,公鑰解密--解密

x509encodedkeyspec x509encodedkeyspec = new

x509encodedkeyspec(rsapublickey.getencoded());

keyfactory publickeyfactory = keyfactory.getinstance("rsa");

publickey publickey =publickeyfactory.generatepublic(x509encodedkeyspec);

cipher publiccipher = cipher.getinstance("rsa");

publiccipher.init(cipher.decrypt_mode, publickey);

result =publiccipher.dofinal(result);

system.out.println("私鑰加密,公鑰解密--解密:"+new string(result));

2、公鑰加密,私鑰解密:

//

公鑰加密,私鑰解密---加密

x509encodedkeyspec = new

x509encodedkeyspec(rsapublickey.getencoded());

publickeyfactory = keyfactory.getinstance("rsa");

publickey =publickeyfactory.generatepublic(x509encodedkeyspec);

publiccipher = cipher.getinstance("rsa");

publiccipher.init(cipher.encrypt_mode, publickey);

result =publiccipher.dofinal(src.getbytes());

system.out.println("公鑰加密,私鑰解密---加密:"+base64.encodebase64string(result));

//公鑰加密,私鑰解密---解密

pkcs8encodedkeyspec = new

pkcs8encodedkeyspec(rsaprivatekey.getencoded());

privatekeyfactory = keyfactory.getinstance("rsa");

privatekey =privatekeyfactory.generateprivate(pkcs8encodedkeyspec);

privatecipher = cipher.getinstance("rsa");

privatecipher.init(cipher.decrypt_mode, privatekey);

result =privatecipher.dofinal(result);

system.out.println("公鑰加密,私鑰解密---解密:"+new string(result));

根據輸出的結果不難發現,公鑰和私鑰並不一致,私鑰的長度要大於公鑰。

到今天對於資訊的加密演算法:base64、對稱加密演算法、訊息摘要加密演算法、非對稱加密演算法就全部總結完畢。

RSA 非對稱加密演算法

1.對稱加密 甲方選擇某一種加密規則,對資訊進行加密 乙方使用同一種規則,對資訊進行解密。非對稱加密 乙方生成兩把金鑰 公鑰和私鑰 公鑰是公開的,任何人都可以獲得,私鑰則是保密的。甲方獲取乙方的公鑰,然後用它對資訊加密。乙方得到加密後的資訊,用私鑰解密。2.尤拉定理 rsa演算法的核心 可以大大簡化...

非對稱加密演算法 RSA

1 非對稱加密過程 國內使用的是雙證書體系 即使用者同時擁有簽名證書 和加密證書 兩張證書。簽名證書 是使用者的身份驗證是和ca協商的結果 加密證書 是用來對資訊進行加密,是使用者和秘鑰管理系統生成 過程是生成公鑰和私鑰的過程,基於rsa演算法實現 過程是ca對使用者的身份進行簽名,目的是驗證a的身...

非對稱加密演算法 RSA

rsa加密演算法於1977年由美國麻省理工學院的ronal rivest,adi shamir和len adleman三位年輕教授提出,並以三人的姓氏rivest,shamir和adleman命名為rsa演算法。這三位科學家榮獲2002年度圖靈獎,以表彰他們在演算法方面的突出貢獻。該演算法利用了數論...