This article provides the algorithm and instructions on how to use tools.
Every account has 4 keys roles: owner, active, posting, and memo. The algorithm used to generate the private key depends upon the the account, role, and password.
Algorithm
secret = SHA256( account + role + password )
C++ Algorithm
string seed = account + role + password;
auto secret = fc::sha256::hash( seed.c_str(), seed.size() );
auto key = fc::ecc::private_key::regenerate( secret );
Using the CLI wallet
The command line wallet has a helper api call that will return the public key and private key in WIF format.
locked >>> get_private_key_from_password username active "password"
[
"STM5SKxjN1YdrFLgoPcp9KteUmNVdgE8DpTPC9sF6jbjVqP9d2Utq",
"5JamTPvZyQsHf8c2pbN92F1gUY3sJkpW3ZJFzdmfbAJPAXT5aw3"
]
Note: The username and keys generated are not validated against the blockchain state and are not saved in your wallet. This CLI api is merely a utility. STM5SKxjN1YdrFLgoPcp9KteUmNVdgE8DpTPC9sF6jbjVqP9d2Utq is the public key in Steem format, and 5JamTPvZyQsHf8c2pbN92F1gUY3sJkpW3ZJFzdmfbAJPAXT5aw3 is the private key in Bitcoin's Wallet Import Format (WIF).