FISCO BCOS 国密版的哈希函数

FISCO BCOS既可以部署国密版的区块链,又可以部署非国密版的区块链,同时两者都支持solidity语言编写的智能合约。但让我好奇的是,在国密版的链上有没有实现对应的国密版哈希函数,验签函数?

例如,在非国密版的区块链上,可以用solidity写keccak256函数来对一段内容做哈希运算。那在国密版中是不是有对应的sm3函数来做这样的哈希运算?还是国密版的keccak256函数底层使用了sm3函数?为了弄清楚这一点,我写了一些测试代码进行测试

智能合约代码如下:

pragma solidity >=0.4.0 <0.7.0;

contract HelloWorld2 {
    
	string hello = "hello, world";

	function sayHello() public view returns (string memory) {
		return hello;
	}

    function hashTest(bytes memory _input) public pure returns(bytes32) {
        bytes32 result = sha256(_input);
        return result;
    }
    
    function kehashTest(bytes memory _input) public pure returns(bytes32) {
        bytes32 result = keccak256(_input);
        return result;
    }
}

在webase平台上部署运行kehashTest函数,如下图所示:

FISCO BCOS 国密版的哈希函数_第1张图片

运行结果如下图所示:

FISCO BCOS 国密版的哈希函数_第2张图片

然后,在线下我写了测试代码,发现是用国密的SM3算法算出来的。部分代码如下:

try {
			bytes = Hex.decodeHex("deadbeef");
		} catch (DecoderException e) {
			e.printStackTrace();
		}
System.out.println(SM3.byteArrayToHexString(SM3.hash(bytes)));

从而证明了在国密版的链上,keccak256函数底层实际上使用的是SM3算法。

你可能感兴趣的:(区块链,FISCO,BCOS)