Hyperledger fabric 链码AES ECC椭圆曲线

链码实现的业务逻辑
链码设计椭圆曲线加密解密、AES加密解密
业务逻辑:
加密部分:
输入:2部分
明文信息(指定唯一键值)、AES密钥
输出:上链成功信息
链码中写入详细注释并在链码镜像中输出
具体上链数据以及加密步骤
唯一键值---------第一个上链数据
第一步:通过AES加密学生信息 输出信息密文 ----第二个上链数据
第二步:为学生生成ECC密钥对
第三步:为可视化密钥对,编码密钥对,输出编码信息
第四步:通过学生ECC公钥加密AES密钥 ------------第三个上链数据
第四步:编码学生ECC私钥并下发----------第四个上链数据

解密部分:
输入: 2个部分
唯一键值
自己的ECC私钥
输出:
信息明文
解密步骤:
第一步:通过唯一键值获取链上数据
第二部:取出AES加密学生信息的密文、ECC加密AES密钥的密文
第三步:通过输入的ECC私钥解密获取AES密钥
第四步:通过AES密钥解密获取明文

全部操作均在链码中进行

链码安装

peer chaincode install -n eduecc -v 1.0 -l golang -p github.com/chaincode/ecc

链码实例化

peer chaincode instantiate -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n eduecc -l golang -v 1.0 -c '{"Args":["init"]}' -P 'OR ('\''Org1MSP.peer'\'','\''Org2MSP.peer'\'')'

链码调试过程更新链码操作1安装新的链码2执行链码更新操作

peer chaincode install -n eduecc -v 1.1 -l golang -p github.com/chaincode/ecc
peer chaincode upgrade -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n eduecc -l golang -v 1.1 -c '{"Args":["init"]}' -P 'OR ('\''Org1MSP.peer'\'','\''Org2MSP.peer'\'')'

数据加密上链操作 输入 明文、AES密钥

peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n eduecc --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt  -c '{"Args":["teacherTrans","prod_5","于三","男","汉族","32031189765239","北京市长安街001号","2020-1-1","软件工程","硕士","99","99","99","99","624","80","90","A","hgfedcba87654321"]}'

执行 docker logs 链码镜像ID 查询链上执行日志,获取私钥并下发授权
数据查询解密操作–数据键值、私钥,返回明文

peer chaincode query -C mychannel -n eduecc -c '{"Args":["stuQuery","prod_5","LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUtVZTVGVTBVQzV3eXBzakFWZ2trRTZjNzAxRExpTStabVJseXd3Y3RYK3NvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFckFaRzhERGNERHgzV3hlYS9JL21qMjMrZWVMMnAwa3hpUXJ4bHc3YmxHMVNXQTFMN0VXbwozMjlsSnVmcnYzeEJ1Z3J2RmRpWDZoYTZ5NW0xMzlKWVJ3PT0KLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQo="]}'

在这里插入图片描述
二、
安装

peer chaincode install -n aes -v 1.0 -l golang -p github.com/chaincode/aes

实例化

peer chaincode instantiate -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n aes -l golang -v 1.0 -c '{"Args":["init"]}' -P 'OR ('\''Org1MSP.peer'\'','\''Org2MSP.peer'\'')'

更新

peer chaincode upgrade -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n aes -l golang -v 2.7 -c '{"Args":["init"]}' -P 'OR ('\''Org1MSP.peer'\'','\''Org2MSP.peer'\'')'

数据加密上链

peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n aes --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt  -c '{"Args":["teacherTrans","prod_7","张三","男","hgfedcba87654321"]}'

在这里插入图片描述
数据查询解密

peer chaincode query -C mychannel -n aes -c '{"Args":["stuQuery","prod_7"]}'

链码方法中数据输入与输出类型:
AES加解密:
encryptAES([]byte,[]byte)返回[]byte
decryptAES([]byte,[]byte)返回[]byte
base64编码解码:
baseStdEncode([]byte)返回string
baseDeEncode(string)返回string
x509编码解码:
encode(*ecdsa.PrivateKey,ecdsa.PublicKey)返回string(pri),string(pub)
decode(string,string)返回
ecdsa.PrivateKey,*ecdsa.PublicKey
ECC加解密:
ECCEncrypt(string,PublicKey)返回[]byte
ECCDecrypt([]byte,*ecdsa.PrivateKey)返回[]byte
其中ECC的密钥长度可选:
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值