Bouncy Castle演算法庫中ECIES演算法呼叫示例
轉自 :http://blog.sina.com.cn/s/blog_57432f380101s2l7.html
JRE8 + jce_policy-8, Bouncy Castle 1.50環境下除錯通過
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.Security;
import javax.crypto.Cipher;
import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
import org.bouncycastle.jce.interfaces.ECPrivateKey;
import org.bouncycastle.jce.interfaces.ECPublicKey;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.math.ec.ECCurve;
import org.bouncycastle.math.ec.ECPoint;
public class TestECC {
public static void main(String[] args) throws Exception {
byte[] plainText = "Hello World!".getBytes();
byte[] cipherText = null;
Security.addProvider(new BouncyCastleProvider());
//生成公鑰和私鑰
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("ECIES", "BC");
KeyPair keyPair = keyPairGenerator.generateKeyPair();
ECPublicKey ecPublicKey = (ECPublicKey) keyPair.getPublic();
ECPrivateKey ecPrivateKey = (ECPrivateKey) keyPair.getPrivate();
//列印金鑰資訊
ECCurve ecCurve = ecPublicKey.getParameters().getCurve();
System.out.println("橢圓曲線引數a = " + ecCurve.getA().toBigInteger());
System.out.println("橢圓曲線引數b = " + ecCurve.getB().toBigInteger());
System.out.println("橢圓曲線引數q = " + ((ECCurve.Fp) ecCurve).getQ());
ECPoint basePoint = ecPublicKey.getParameters().getG();
System.out.println("基點橫座標 "
+ basePoint.getAffineXCoord().toBigInteger());
System.out.println("基點縱座標 "
+ basePoint.getAffineYCoord().toBigInteger());
System.out.println("公鑰橫座標 "
+ ecPublicKey.getQ().getAffineXCoord().toBigInteger());
System.out.println("公鑰縱座標 "
+ ecPublicKey.getQ().getAffineYCoord().toBigInteger());
System.out.println("私鑰 " + ecPrivateKey.getD());
Cipher cipher = Cipher.getInstance("ECIESwithDESede/NONE/PKCS7Padding", "BC");
// 加密
cipher.init(Cipher.ENCRYPT_MODE, ecPublicKey);
cipherText = cipher.doFinal(plainText);
System.out.println("密文: " + new HexBinaryAdapter().marshal(cipherText));
// 解密
cipher.init(Cipher.DECRYPT_MODE, ecPrivateKey);
plainText = cipher.doFinal(cipherText);
// 列印解密後的明文
System.out.println("解密後的明文: " + new String(plainText));
}
}
相關推薦
Bouncy Castle演算法庫中ECIES演算法呼叫示例
轉自 :http://blog.sina.com.cn/s/blog_57432f380101s2l7.html JRE8 + jce_policy-8, Bouncy Castle 1.50環境下除錯通過 import java.security.KeyPair;
vector 二維陣列的push_back,stl演算法庫中的sort排序,vector insert 用法
1.vector 二維陣列的push_back vector<vector<int> >vec; vector<int>array1; for (int i=0;i<num;i++) {
演算法導論中的演算法總結
1、插入排序 INSERTION_SORT(A) for j = 2 to A.length key = A[j] i = j-1 while i > 0 and A[i] > key A[i+1] = A[i] i = i-1 A[i+1] =
用Python實現演算法導論中的演算法 序
目前正好在學習Python和《演算法導論(原書第三版)》,於是想著想用Python把書中所有演算法實現一遍。更新時間不確定,完成時間我也沒有定下來,大概有空就會寫寫,希望儘早可以完成吧~ 本篇部落格將
Boost演算法庫——C++11演算法(all_of)
標頭檔案'boost / algorithm / cxx11 / all_of.hpp'包含單個演算法all_of的四個變體。 該演算法測試序列的所有元素,如果它們共享一個屬性,則返回true。 例程all_of需要一個序列和一個謂詞。 如果謂詞在應用於序列中的每個元素時
OpenCV庫中watershed函式(分水嶺演算法)的詳細使用例程
#include <iostream> #include <opencv2\opencv.hpp> using namespace std; using namespace cv; Mat srcImage, srcImage_, maskImage; Mat maskWaterS
K-means和K-means++的演算法原理及sklearn庫中引數解釋、選擇
前言: 這篇博文主要介紹k-means聚類演算法的基本原理以及它的改進演算法k-means的原理及實現步驟,同時文章給出了sklearn機器學習庫中對k-means函式的使用解釋和引數選擇。 K-means介紹: K-means演算法是很典型的
SM2演算法第二十七篇: openssl庫中的BIGNUM(超讚)
openssl庫中的BIGNUM,處理大數比較好,可以用在很多方面。 BIGNUM是一個typedef的結構,可以直接使用。但一般來說,使用它的指標結構。如:BIGNUM *p; BIGNUM的建立與釋放 函式原型 解釋 示例 BIGNUM * BN_new (voi
機器學習開源演算法庫
C++計算機視覺 CCV —基於C語言/提供快取/核心的機器視覺庫,新穎的機器視覺庫 OpenCV—它提供C++, C, Python, Java 以及 MATLAB介面,並支援Windows, Linux, Android and Mac OS作業系統。
[PHP]演算法-二進位制中1的個數的PHP實現
二進位制中1的個數: 輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示。 思路: 1.右移位運算>> 和 與運算& 2.先移位個然後再與1 &運算為1的就是1 3.這裡如果是負數就會出現死迴圈,負數右移後高位會一直補1 4.因此要實現一下無符號位移 無符
Android中的演算法
演算法是思想的體現形式,常見的演算法做一些總結 演算法簡介 演算法—Algorithm 解題方案的準確而完整的描述,是一系列解決問題的清晰指令 特徵 有窮性,確切性,輸入項,輸出項,可行性 演算法運算要素 算術運算:加減乘除等運算 邏輯運算:或、且、非等運算 關係運算:大於、小於、等於、不等於等
演算法圖解中的二分查詢
對於一種有序的元素列表,很多人的第一反應會是將元素一個一個的進行查詢形成簡單查詢 二分查詢是針對有序元素列表進行的查詢性演算法,舉例說明,如果1-100數字,二分查詢就是對半進行,判斷數字在1-50還是51-100,如果在1-50範圍內,在1-25和26-50進行查詢判斷。 使用python
工作中加密演算法實踐
遊戲中需要對接銀聯渠道 對方需求是需要使用非對稱加密演算法 簽名機制: 對於報文的簽名處理機制如下:首先,對報文中出現簽名域(sign)之外的所有資料元採用key=value的形式按照名稱排序,然後以&作為連線符拼接成待簽名串。其次,對待簽名串使用SHA-1演算法做摘要,再使用接入
C++拾取——使用stl標準庫實現排序演算法及評測
今天看了一篇文章,講各種語言的優勢和劣勢。其中一個觀點:haskell非常適合寫演算法,因為使用者不用去關心具體的計算機實現,而只要關注於操作語義。這讓它在專心研究演算法的人中非常受歡迎。所以很多時候,語言的爭論沒有太多的意義,有意義的是它
centos7安裝numpy等矩陣演算法庫
pip是管理python第三庫的倉庫,類似於管理rpm軟體倉庫的yum伺服器。因此安裝Nump庫、scipy庫、matplotlib庫可以通過先安裝pip管理工具,然後通過pip來安裝第三方庫。 (1)首先安裝pip工具:i) yum -
中位數演算法-自己寫的爛碼
import java.util.*; public class Zhongweishufa { public static void main(String args[]){ Scanner in=new Scanner(System.in); while(
skiti-learn邏輯迴歸演算法庫
skiti-learn中,與邏輯迴歸相關的3個類:LogisticRegression, LogisticRegressionCV,logistic_regression_path。LogisticRegressionCV使用交叉驗證選擇正則化係數C。logistic_regression_
skiti-learn線性迴歸演算法庫
線性迴歸的目的是要得到輸出向量Y和輸入特徵X之間的線性關係,求出線性迴歸係數θ,也就是 Y=Xθ。其中Y的維度為mx1,X的維度為mxn,而θ的維度為nx1 LinearRegression 最常見的普通線性迴歸,損失函式如下: J(θ)=1/2 (Xθ−Y)T (Xθ−Y)
skiti-learn KNN演算法庫
skiti-learn中KNN分類樹的類是KNighborsClassifier,KNN迴歸樹的類是KNighborsRegressor.除此之外,限定半徑的最鄰近分類樹RadiusNighborsClassifier,限定半徑的最鄰近迴歸樹RadiusNighborsRegressor,最
skiti-learn決策樹演算法庫
skiti-learn內部實現的是調優過的CART決策樹。既可以做分類,也可以做迴歸。分類決策樹採用的類是DecisionTreeClassifier,迴歸則是DecisionTreeRegressor。 DecisionTreeClassifier and DecisionTr