最近工作中遇到rsa加密操作,公私鑰知識自行腦補,廢話不多說,直接上**
//傳送方
string data ="asda";//需加籤/加密的資料
system.out.println("源資料:"+data);
// 生成私鑰
keypairgenerator kpgen = keypairgenerator.getinstance("rsa");
kpgen.initialize(512);
keypair keypair = kpgen.generatekeypair();
publickey publickey = keypair.getpublic();
privatekey privatekey =keypair.getprivate();
//加簽
signature signature = signature.getinstance("sha1withrsa");
signature.initsign(privatekey);
signature.update(data.getbytes("utf8"));
string sigdata = base64.getencoder().encodetostring(signature.sign());
system.out.println("加簽後:"+sigdata);
//加密
// 建立密碼器
cipher cipher1 = cipher.getinstance("rsa");// 建立密碼器
cipher1.init(cipher.encrypt_mode, privatekey);
byte result1 = cipher1.dofinal(data.getbytes("utf8"));
string encodeddata = base64.getencoder().encodetostring(result1);
system.out.println("加密結果:"+encodeddata);
//接收方
//驗籤
x509encodedkeyspec keyspec = new x509encodedkeyspec(publickey.getencoded());
keyfactory keyfactory = keyfactory.getinstance("rsa");
signature signature2 = signature.getinstance("sha1withrsa");
signature2.initverify(keyfactory.generatepublic(keyspec));
signature2.update(data.getbytes("utf8"));
system.out.println("驗籤結果:"+signature2.verify(base64.getdecoder().decode(sigdata)));
//解密
// 建立密碼器
cipher cipher = cipher.getinstance("rsa");
cipher.init(cipher.decrypt_mode, keyfactory.generatepublic(keyspec));
byte result = cipher.dofinal(base64.getdecoder().decode(encodeddata));
system.out.println( "解密結果:"+new string(result,"utf8"));
使用RSA對資料進行加簽且驗籤
加簽驗籤是為了驗證接收到的資料的真實性問題,但此次我的應用場景是這樣的 因為要從乙個系統傳送http請求到另乙個系統的網域名稱上去獲取相應的資料,但是被請求的這個網域名稱是外網網域名稱 任何人都能通過請求這個網域名稱位址來獲取資料 所以簡單的使用簽名來做一下校驗,驗籤不通過的請求則不允許獲取資料。下...
資料加密 RSA 加解密
對於rsa加解密來說,在ios的api中同樣也是提供了這兩種形式的方法。seckeyencrypt 加密 seckeydecrypt 解密 複製 openssl 同樣也提供了一系列的方法 rsa public encrypt rsa private encrypt rsa public decryp...
使用Poco庫進行加解密和簽名驗籤
在crypto testsuit src rsatest.h和rsatest.cpp有示例 可以參考。下面是摘自另乙個 上的部分 並茂,感覺講得很好,拿來分享給大家。非對稱加解密過程如圖 如下 include poco crypto rsakey.h include poco crypto rsad...