我的目标是钱包地址加密,使用TronWeb.createAccount((,我在base58中获取钱包的公共地址,并将私钥作为十六进制。
Sample Public Address: TPeGpPdJGQoNobV4SEjXLdrjefN3iCAAAA
Sample Private Key: 6B07B82D50B27171F35BF1DEAB14...
我使用以下代码获取密钥。
const TronWeb = require('tronweb');
function createAccount() {
try {
const tronWeb = new TronWeb(fullNode, solidityNode, eventServer);
return tronWeb.createAccount();
} catch (error) {
console.log(error);
throw error;
}
}
当我在 bob.createECDH(( 中设置私钥后使用 getPublicKey(( 方法时,代码工作正常,但实际上当我在 bob 端时,我不会有 setPrivateKey(( 方法的实用程序。所以我必须在两边传递 base58 公共地址,而不是 bob.getPublicKey(( 或 alice.getPublicKey((。
const alice_secret = alice.computeSecret('HEX_PUBLIC_KEY','hex');
以下是加密和解密的完整代码。
const alice = crypto.createECDH('secp256k1');
const bob = crypto.createECDH('secp256k1');
bob.setPrivateKey("PRIVATE_KEY_FOR_BOB", "hex");
alice.setPrivateKey("PRIVATE_KEY_FOR_ALICE", "hex");
const alice_secret = alice.computeSecret(bob.getPublicKey());
console.log("alice's shared Key: " + alice_secret.toString('hex') + "n");
var algo = 'aes-256-ecb', plainText = "Some secret to share bob";
var cipher = crypto.createCipher(algo, alice_secret)
var encrypted = cipher.update(plainText, 'utf8', 'hex')
encrypted += cipher.final('hex');
console.log("Encrypted: " + encrypted);
const bob_secret = bob.computeSecret(alice.getPublicKey());
console.log("bob's shared Key: " + bob_secret.toString('hex') + "n");
var decipher = crypto.createDecipher(algo, bob_secret)
var decrypted = decipher.update(encrypted, 'hex', 'utf8')
decrypted += decipher.final('utf8');
console.log("Decrypted: " + decrypted);
if (plainText == decrypted) {
console.log("ECDH Success")
}
当我使用 setPrivateKey(( 然后使用 getPublicKey(( 时,输出是预期的
alice's shared Key: 238c3eba08585a5cae1006710c79fe2de329545e9ca4c1ef719c53b55eb337b6
app.js:21 Encrypted: 44184052d9e205fd855aaf5f30b5f186c4bab88a5cfdce58d99cd8c696954c8dd5676807e6fe372fbe3ca5b230e54293
app.js:29 bob's shared Key: 238c3eba08585a5cae1006710c79fe2de329545e9ca4c1ef719c53b55eb337b6
app.js:35 Decrypted: QmdUuJDvgZ7EWEpJmEcFCoYwotn9CHyvK4qEhZs82AhZoQ
app.js:40 ECDH Success
当我使用 bs58 或任何其他包将公钥转换为十六进制时,它说
UnhandledPromiseRejectionWarning: Error: Failed to translate Buffer to a EC_POINT
有没有办法转换此公共地址并在这种情况下使用它?
我必须研究 ECDH 支持的密钥格式并根据新格式重新生成密钥才能解决此问题。我们可以使用两种格式的公钥来加密数据。