1. Sau đây là một số hàm toán học thường được sử dụng sẽ an toàn và đáng tin cậy hơn.
addmod(uint x, uint y, uint k) trả về (uint): Tính x + y modulo k.
mulmod(uint x, uint y, uint k) trả về (uint): Tính x * y modulo k.
2. API liên quan đến hàm băm
Hàm băm còn được gọi là hàm băm: đầu vào có độ dài bất kỳ được chuyển thành đầu ra có độ dài cố định thông qua thuật toán băm (MD4, MD5, ninemd-160, SHA "Thuật toán băm an toàn").
Gia đình SHA:
SHA1: Giá trị bit 160-bit, hiện được chứng minh là không an toàn đặc biệt. Có thể các giá trị đầu vào khác nhau sẽ nhận được cùng một giá trị băm.
SHA2: SHA-224, SHA-256, SHA-384 và SHA-512 Các số khác nhau phía sau biểu thị độ dài giá trị băm được tính toán.
SHA3: Thuật toán Keccak
Solidity cung cấp những hàm băm nào?
keccak256(...) trả về (byte32): Dựa trên thuật toán băm Keccak-256, tính toán giá trị băm của đầu vào có độ dài thay đổi.
sha256(...) trả về (byte32): Dựa trên thuật toán băm SHA-256, tính giá trị băm của đầu vào có độ dài thay đổi.
ninemd160(...) trả về (byte20): Dựa trên thuật toán băm RIPEMD-160, tính toán giá trị băm của đầu vào có độ dài thay đổi.
sha3(...) trả về (byte32): Đây thực sự là bí danh cho hàm keccak256. Việc sử dụng hàm này không còn được khuyến nghị trong Solidity0.4.16 và các phiên bản mới hơn.
Giá trị băm của bộ chọn hàm ở dạng rắn được tính bằng thuật toán băm keccak256. Giá trị băm của 4 byte đầu tiên được lấy làm thông tin nhận dạng của bộ chọn hàm.
3. chức năng phục hồi
Chúng tôi có thể khôi phục địa chỉ được liên kết với khóa chung thông qua chữ ký đường cong elip, ecrecover(bytes32 hash,uint8 v,bytes32 r,bytes32 s)returns(address)
Bốn tham số là:
Hash: Giá trị băm của dữ liệu đã ký, r, s và v tương ứng đến từ chuỗi kết quả chữ ký.
r = chữ ký[0:64]
s = chữ ký[64:128]
v = chữ ký[128:130]+27