- Người dùng tạo một mật khẩu bất kỳ, chuyển mật khẩu này về dạng hex, sau đó ký với password này, ví dụ:
// 0x70617373776f7264 là hex của 'password' personal.sign("0x70617373776f7264", "0x3c31b4b9d6c24bad29498f99aaa6914231362c7f")
Kết quả chúng ta sẽ nhận được 1 chuỗi ở phía client: 0xd8591710d40164116769731b960076fc901a05c7b0acec758e40dd3e6819a1d858540bc923db93f064c987ead6c6c41d62fcd6d874c06eba7092c23bd72631d61c
- Tiếp theo client sẽ gửi lên server cả mật khẩu và chuỗi vừa nhận được
- Server sẽ giải mã chuỗi vừa nhận được với mật khẩu, và chúng ta sẽ nhận được tài khoản của người dùng, ví dụ:
personal.ecRecover("0x70617373776f7264", "0xd8591710d40164116769731b960076fc901a05c7b0acec758e40dd3e6819a1d858540bc923db93f064c987ead6c6c41d62fcd6d874c06eba7092c23bd72631d61c")
Kết quả chúng ta nhận được ở server: 0x3c31b4b9d6c24bad29498f99aaa6914231362c7f
.
Tuy nhiên chúng ta thường có nhu cầu tạo tài khoản cho user vói nhiều hơn thông tin hơn, ví dụ:
{ "username": "dzung", "password": "123456", "email:": "dung@youngmonkeys.org" }
- Chúng ta có thể chuyển thông tin này thành dạng hex thế này:
0x7b0d0a202022757365726e616d65223a2022647a756e67222c0d0a20202270617373776f7264223a2022313233343536222c0d0a202022656d61696c3a223a202264756e6740796f756e676d6f6e6b6579732e6f7267220d0a7d
- Client sẽ ký nó:
personal.sign("0x7b0d0a202022757365726e616d65223a2022647a756e67222c0d0a20202270617373776f7264223a2022313233343536222c0d0a202022656d61696c3a223a202264756e6740796f756e676d6f6e6b6579732e6f7267220d0a7d", "0x3c31b4b9d6c24bad29498f99aaa6914231362c7f")
Kết quả client sẽ nhận được chuỗi: 0x120f5a9c0bff5d7997ac166960c2bbf7ea8c44cbe9c3640c17017ebe33f864327b7e8fa1b92edefc5e04dbf4f4431c73fde0bbe107d4ff87d6f361a961d5d8fb1c
- Client gửi cả chuỗi hex và chuỗi vừa nhận được lên server
- Server sẽ giải mã chuỗi vừa nhận được:
personal.ecRecover("0x7b0d0a202022757365726e616d65223a2022647a756e67222c0d0a20202270617373776f7264223a2022313233343536222c0d0a202022656d61696c3a223a202264756e6740796f756e676d6f6e6b6579732e6f7267220d0a7d", "0x120f5a9c0bff5d7997ac166960c2bbf7ea8c44cbe9c3640c17017ebe33f864327b7e8fa1b92edefc5e04dbf4f4431c73fde0bbe107d4ff87d6f361a961d5d8fb1c")
Kết quả server sẽ nhận được: 0x3c31b4b9d6c24bad29498f99aaa6914231362c7f
- Server sẽ lưu lại toàn bộ thông tin vào database và lần kế tiếp user sẽ có thể đăng nhập qua username, email hay địa chỉ ví đều được