Как я могу создать другой адрес и открытый ключ для того же закрытого ключа в ethereumj?

Если я выполню шаги, указанные в разделе Как создать учетную запись в ethereumj .

Он создает новую учетную запись каждый раз с другим закрытым ключом/адресом/открытым ключом. Я хотел бы каждый раз создавать разные адреса/открытые ключи для одного и того же пароля.

Вы говорите о детерминированном кошельке или мозговом кошельке?

Ответы (1)

Он создает новую учетную запись каждый раз, потому что,

    ECKey key = new ECKey(); // it will take new  random entity 
//every time and it is the right way to create new accounts, in java

Я думаю, вы путаете закрытый ключ с паролем. В реализации Ethereumj нет ничего, что называлось бы паролем.

Закрытый ключ должен быть как можно более случайным. И поскольку люди не могут быть достаточно хорошими/умными, чтобы создать случайное число, которое помогло бы сгенерировать открытый ключ и, в конечном итоге, адрес из него (который также должен быть уникальным). Конструктор ECKey внутренне использует генератор SecureRandom() для создания случайного текста, который будет генерировать открытый ключ, который является достаточно уникальным (учитывая случайность закрытого ключа, адрес гарантирован математически).

Если вы исходите из фона geth с помощью объекта web3.personal для создания учетных записей, то я вижу, что вы путаете пароль с закрытым ключом. Но обратите внимание, что созданная вами учетная запись не имеет ничего общего с паролем, который вы предоставляете. Пароль используется только для шифрования файла хранилища ключей, который содержит ваш закрытый ключ и другую информацию. И ваш закрытый ключ по-прежнему является случайным, и вы даже не знаете, какое семя для него использовалось.

Однако для умных парней вы можете сгенерировать уникальный текст, такой как TimeStamp+myuniquepass+randomnumber , это можно использовать следующим образом. Но на вашем месте я бы все равно использовал ключ ECKey = new ECKey() для создания/генерации учетных записей. .

>  ECKey key =
>         ECKey.fromPrivate(HashUtil.sha3(TimeStamp+myuniquepass+randomnumber .getBytes())); // not working code , but you get the point.
>         
>         
>         byte[] addr = key.getAddress();
>         byte[] priv = key.getPrivKeyBytes();
>           byte[] pb=      key.getPubKey();
> 
>         String addrBase16 = Hex.toHexString(addr);
>         String privBase16 = Hex.toHexString(priv);