¿Cómo puedo crear una dirección diferente y una clave pública para la misma clave privada en ethereumj?

Si sigo los pasos mencionados en Cómo crear una cuenta en ethereumj .

Crea una nueva cuenta cada vez con una clave privada/dirección/clave pública diferente. Me gustaría crear una dirección/clave pública diferente para la misma contraseña cada vez.

¿Estás hablando de una billetera determinista o una billetera cerebral?

Respuestas (1)

Crea una nueva cuenta cada vez porque,

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

Creo que está confundiendo una clave privada con una contraseña. No hay nada llamado contraseña en la implementación de Ethereumj.

Una clave privada tiene que ser lo más aleatoria posible. Y dado que los humanos no pueden ser lo suficientemente buenos/inteligentes para crear un número aleatorio que ayudaría a generar una clave pública y, finalmente, una dirección a partir de eso (que también debe ser única). El constructor ECKey usa internamente el generador SecureRandom() para crear un texto aleatorio que generaría una clave pública que es lo suficientemente única (dada la aleatoriedad de la clave privada, la dirección está matemáticamente garantizada).

Si proviene de un entorno geth con la forma de objeto web3.personal de generar cuentas, entonces veo su punto de confundir una contraseña con una clave privada. Pero tenga en cuenta que la cuenta que genera no tiene nada que ver con la contraseña que proporciona. La contraseña se usa solo para cifrar el archivo del almacén de claves, que contiene su clave privada y otra información. Y su clave privada sigue siendo aleatoria allí y ni siquiera conoce la semilla utilizada para ello.

Sin embargo, para los chicos inteligentes, puede generar un texto único como TimeStamp+myuniquepass+randomnumber , esto se puede usar de la siguiente manera. .

>  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);