与RSA加密一起使用时,Chaincode的PutState()和GetState()值不匹配

时间:2019-04-16 02:37:12

标签: rsa hyperledger-fabric hyperledger chaincode

以下代码返回“不匹配!”错误:

pub, priv := GenerateKeyPair(2048)
ct1 := EncryptWithPublicKey([]byte("abc"), pub)
err := stub.PutState("ct", ct1)
ct2 := stub.GetState("ct")
if string(ct1[:]) != string(ct2[:]) {
    return shim.Error("does not match!") //error returned
}
pt := DecryptWithPrivateKey(ct2, priv)

使用的RSA库:https://gist.github.com/miguelmota/3ea9286bd1d3c2a985b67cac4ba2130a

如果字符串比较部分被注释掉,则解密函数返回错误“ crypto / rsa解密错误”。

以下代码可以正常工作:

pub, priv := GenerateKeyPair(2048)
ct := EncryptWithPublicKey([]byte("abc"), pub)
pt := DecryptWithPrivateKey(ct, priv)

1 个答案:

答案 0 :(得分:1)

Fabric事务的工作方式意味着您无法从事务中写入的状态数据库(PutState)中读取(GetState)值。读取(GetState)将始终在事务开始之前返回该值。

Transaction Flowsequence diagram上的以下链接将在需要时为您提供更多交易背景。