fabric-sdk-java 私钥签名
SDK下载地址:https://github.com/hyperledger/fabric-sdk-java
给了个任务,是使用私钥对数据进行签名。
本来以为这个sdk安卓上也能用,结果看了官方说不支持Android。
通过百度跟Google并没有发现什么资料,好惨。。。还是看源码。。。
源码版本我看的是1.4.0的,官网已经是2.0的了
先看了Readme,这个时候就是翻译软件有用的时刻,除了API(https://sdkjavadocs.github.io/),并没有发现别的啥有用的东西,然后查看跟加密有关的文件。
首先看的是fabric_ca文件夹里边的代码,单纯是因为看到了ca证书很亲切。硬着头皮瞅了仨小时,还没看到加密签名相关的代码,MMP。大家都知道,硬的时间长了对身体不好,所以决定先看看窗外的风景。
然后就开始看frabic文件夹里边的代码,忽然看到了security文件夹,吆喝,似乎看到了曙光。
image.png
此时我的心情跟这个文件的前三个字母一样想哭。。。
一瞅里边的方法,感觉好像看到了久别的女朋友一样激动。
image.png随后一顿猛操作
public static void main(String[] args){
try {
CryptoPrimitives cryptoPrimitives = new CryptoPrimitives();
//私钥
String stringPrivateKey = "";
//证书
String stringCertificate = "";
cryptoPrimitives.init();
//获取私钥
PrivateKey privateKey = cryptoPrimitives.bytesToPrivateKey(stringPrivateKey.getBytes());
//获取证书
Certificate certificate = cryptoPrimitives.bytesToCertificate(stringCertificate.getBytes());
//要签名的明文
String msg = "abc=123";
//私钥签名 调用decodeECDSASignature()方法
byte[] sign = cryptoPrimitives.sign(privateKey,msg.getBytes());
//base64编码获得结果
Base64.Encoder encoder = Base64.getEncoder();
String baseSign = encoder.encodeToString(sign);
System.out.println("获取签名Base64结果为:"+baseSign);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
e.printStackTrace();
} catch (CryptoException e) {
} catch (InvalidArgumentException e) {
e.printStackTrace();
}
}
此时我满奶子都是登上人生巅峰的情境。妈的,脑袋已经出现幻觉了,赶紧跑一哈代码,要是还不好我就去死。
运行这个main,忽然发现我是搞安卓的,好多文件还在报红,不会编译这个SDK代码,TM,尴尬症要犯了。。。那我现在找后台的人来编译这玩意不是就感觉跟被人家抓着小辫子一样不舒服么。爸爸的命运要自己掌握。
看官网ReadMe的编译条件,人家条件说的很明白,JDK1.8,Maven 3.5,搞起来(搞了半天,算了,还是给java后台的一个机会,人生在世谁还没个小污点呢)
最后是创建了一个Web项目,然后把这个frabic源码作为三方库引进去结果可以用了
image.png写完之后才想起来源码里边有test文件夹,里边是SDK源码的测试类,如果不会用SDK的类,看这个对应的test类就对了(在官网的ReadMe里边提到的)。那我们就来看看人家怎么用的
image.png
然后凭着绝顶聪明的脑袋(不不不,我还有头发)找到了签名的方法。(要是恋爱有迹可循就好了)
test类下CryptoPrimitivesTest的签名方法测试.png
那我们现在就使用人家的代码就好了,应该比自己瞎鸡儿摸索的好很多