He intentado usar muchos algoritmos hash, pero la salida en solidez no coincide con la que se proporciona en los convertidores en línea.
Here is my program:-
pragma solidity ^0.4.18;
contract C {
bytes32 public temp;
function hashingsha3 (uint s) {
temp= sha3(s);
}
function hashingsha256 (uint s) {
temp= sha256(s);
}
function kec (uint s) returns (bytes32 hash){
temp= keccak256(s);
}
}
este es el sitio en línea para convertir
He leído que solidity no usa el keccak256 actual aprobado por NIST.
Pero entonces, ¿qué usa que coincida con cualquier salida en línea?
Cualquier ayuda sería útil.
Lista de salidas:
Solidity
sha3(12)
0xdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7
sha256(12)
0xa82872b96246dac512ddf0515f5da862a92ecebebcb92537b6e3e73199694c45
keccak256(12) 0xdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7
convertidor en línea
SHA256(12) 6b51d431df5d7f141cbececcf79edf3dd861c3b4069f0b11661a3eefacbba918
SHA512/256 (12) d0d0b58b8cad7a27781cb78b3212d8abce1a4eb4192882e703f7f2e1ea5158da
SHA3-256(12) 1a9a118cb653759c3fcb3bd5060e6f9910c8c27008dd11fe4315f4635c9caa98
SHA3-512 (12) f235c129089233ce3c9c85f1d1554b9cb21952b27e0765bcbcf75d550dd4d2874e546889da5c44db9c066e05e268f4742d672889ff62fb9cb18a3d06b58
Keccak-256 (12) 7f8b6b088b6d74c2852fc86c796dca07b44eed6fb3daf5e6b59f7c364db14528
Gracias
EDITADO:
pragma solidity ^0.4.18;
contract C {
bytes32 public temp;
function hashingsha3 (bytes s) {
temp= sha3(s);
}
function hashingsha256 (bytes s) {
temp= sha256(s);
}
function kec (bytes s) {
temp= keccak256(s);
}
}
Cambié el código: pero aún las salidas ahora para esto son: Pasadas como una cadena en solidez: sha256 (12) 0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
sha3(12) 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470
keccak256(12) 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470
Completamente de acuerdo con el Sr. Marx. Solo estoy agregando otra respuesta como comentario para su consideración.
Su pregunta llama la atención sobre una suposición oculta. Es decir, que actualmente es posible y conveniente encontrar una biblioteca adecuada para cualquier cliente, y siempre lo será .
En mi opinión , sería una buena idea exponer la función de solo lectura para ayudar a los clientes y brindar una garantía de que siempre podrán calcular el hash con el mismo método que el contrato compilado de hoy. Algo sencillo...
function hashHelper(uint value) public pure returns(bytes32 hash) {
return keccak256(value);
}
La idea sería usar la misma función internamente, evitando así posibles divergencias futuras entre el bytecode compilado y clientes de todas las formas y tamaños.
Espero eso ayude.
El problema que está teniendo es que en su código Solidity, está codificando números, mientras que el convertidor en línea que está utilizando está codificando cadenas.
Si lo hace keccak256("12")
en lugar de keccak256(12)
, obtendrá un hash que coincida con el del sitio web.
"12"
.web3.fromAscii("12") == "0x3132"
, así que escribe 0x3132
. (Como alternativa, puede aceptar a string
en lugar de bytes
. Luego puede simplemente aprobar 12
).web3.js
? web3.py
, truffle
? Si alguno de esos, comparte tu código. Si es algo más, comparte el código o la herramienta que estás usando. Tal vez use capturas de pantalla si es necesario.0xb884017...
es lo que obtienes cuando hash la cadena, "12"
incluidas las comillas dobles (por ejemplo, si pasaste algo como '"12"'
). Entonces, esto es solo un problema de codificación ... donde sea que esté escribiendo "12"
comillas, las comillas también se están convirtiendo.
Vignesh Karthikeyan
neha jain