首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪个sha3输出是正确的?

哪个sha3输出是正确的?
EN

Ethereum用户
提问于 2017-12-28 07:01:30
回答 2查看 694关注 0票数 2

我试图重写PHP中的所有ethereum地址创建和Tx创建,我就快到了。我已经实现了一个sha3,但是现在我不知道它是否给了我正确的输出,因为在处理前缀十六进制字符时,似乎ethereum实现缺乏一致性,在下面的场景中,哪些场景具有这个sha3哈希的正确sha3。在我的php中,我已经生成了这个RPL散列(它是一个十六进制输出) PS,我知道output sha3 (Keccak)和标准sha3 sha3之间的区别。

现在,使用奇偶校验节点和web3js,我创建了一个sha3()。

设想方案1

web3.utils.sha3('ec0185055f9408bc82520c94145e99f7bc840f3ea42d9a64221f041f9955dca2880429d069189e000080038080')

代码语言:javascript
复制
web3.utils.sha3('ec0185055f9408bc82520c94145e99f7bc840f3ea42d9a64221f041f9955dca2880429d069189e000080038080',{encoding:'hex'})

'0x9a8419514d3c7382a6dafc67adf18ac13b818687e9a074a0cee123e0f9a483d8‘

场景2

web3.utils.sha3('0xec0185055f9408bc82520c94145e99f7bc840f3ea42d9a64221f041f9955dca2880429d069189e000080038080')

'0xf1d622e8725ef0dd84e1e65239a0ecac4428b05a2ee0c219739e6e85eb57a8b6‘

设想3

使用以太

代码语言:javascript
复制
var util = require('ethereumjs-util');
var hashed = util.sha3('0xec0185055f9408bc82520c94145e99f7bc840f3ea42d9a64221f041f9955dca2880429d069189e000000038080')

'0x0e79fdc47ef979edbbed33d347f42da74849149139db9d5a58a4038ae6bdc99c‘

设想4

(使用以太)

代码语言:javascript
复制
var util = require('ethereumjs-util');
var hashed = util.sha3('ec0185055f9408bc82520c94145e99f7bc840f3ea42d9a64221f041f9955dca2880429d069189e000080038080')

'0x9a8419514d3c7382a6dafc67adf18ac13b818687e9a074a0cee123e0f9a483d8‘

EN

回答 2

Ethereum用户

回答已采纳

发布于 2017-12-28 07:54:14

就是这个,假设您正在进行的是连续45个字节的哈希操作:

代码语言:javascript
复制
> web3.utils.sha3('0xec0185055f9408bc82520c94145e99f7bc840f3ea42d9a64221f041f9955dca2880429d069189e000080038080',{encoding:'hex'})
'0xf1d622e8725ef0dd84e1e65239a0ecac4428b05a2ee0c219739e6e85eb57a8b6'

(原来,在Web3 1.0中,“编码:‘十六进制’”标志是可选的。以前不是这样的。

为了证实这一点,我编写了一个小LLL程序,以便从EVM获得一个权威的答案:

代码语言:javascript
复制
(returnlll
  (seq
     [0]:0xec0185055f9408bc82520c94145e99f7bc840f3ea42d9a64221f041f9955dca2
    [32]:0x880429d069189e00008003808000000000000000000000000000000000000000
    (return (keccak256 0 45))))

运行它会给,

代码语言:javascript
复制
{"id":1,"jsonrpc":"2.0","result":"0xf1d622e8725ef0dd84e1e65239a0ecac4428b05a2ee0c219739e6e85eb57a8b6"}

如上段所述。

我很确定这是正确的。它尽可能接近EVM,无需编写字节码。

在大多数其他示例(场景1和4)中,您正在散列ASCII字符串表示,可以使用本实用程序进行确认。我不知道场景3在处理什么。

票数 0
EN

Ethereum用户

发布于 2017-12-28 07:31:23

我很抱歉。我想我只是累了。我不知道为什么我不想在问之前做一些尝试和错误。所以我创建并试图根据所有的散列来广播TX

场景1 >>无效发件人。

场景2 >>发送成功。

景物3 >>发送成功。

场景4 >>无效发送方

所以决定使用场景2,因为我的php代码已经输出了,它的工作原理就像一种魅力。

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/34552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档