No recently used tools
Loading categories...
Sign and verify Ethereum messages entirely in your browser using ethers.js v6. Supports EIP-191 personal_sign (MetaMask-compatible) and raw keccak256 hash signing. Generate key pairs, import private keys, and recover signer addresses — no server calls, no data leaves your device.
Ethereum message signing uses the secp256k1 elliptic curve to produce a cryptographic signature that proves the signer controls a specific private key — and therefore a specific Ethereum address — without revealing the key itself. This is the foundation of authentication in decentralized applications (dApps), token approvals, and off-chain governance voting.
The EIP-191 standard (also known as personal_sign) prefixes the message with \x19Ethereum Signed Message:\n<length> before hashing with keccak256. This prefix prevents a signed message from being replayed as a valid Ethereum transaction, making it safe for user-facing "Sign In with Ethereum" flows.
\x19Ethereum Signed Message:\n and the message length before hashing with keccak256 and signing. This is the same method MetaMask and other wallets use, preventing signed messages from being replayed as transactions.r and s, plus a recovery parameter v (27 or 28). The r and s values are the mathematical output of the signing algorithm, while v helps identify which of two possible public keys was used to create the signature.