有什么办法可以使用HD钱包私钥/公钥进行非对称加密吗?

问题描述 投票:0回答:1

我正在开发一个 Flutter 应用程序,该应用程序为使用 BIP39 和 BIP32 的用户创建加密钱包。 使用 BIP39 和 BIP32 我可以为用户创建助记词、私钥和公钥。

现在需要对应用程序用户进行一些非对称加密,这可以通过 RSA 包快速完成。根据我的研究,目前 RSA 只能使用由 RSA 包生成的密钥(可能称为证书)。

我想使用用户钱包生成的 BIP39 和 BIP32 私钥进行加密。 那么有什么方法可以使用这些私钥-公钥来代替 RSA 提供的证书,或者我可以将这些密钥转换为对加密有用

这是我生成私钥-公钥的代码

import 'package:hex/hex.dart';
import 'package:bip39/bip39.dart' as bip39;
import 'package:bip32/bip32.dart' as bip32;

createWallet() async {
    var mnemonic = bip39.generateMnemonic();
    // => 'seed sock milk update focus rotate .....'
    String seed = bip39.mnemonicToSeedHex(mnemonic);
    // => Uint8List [92, 242, 212, 168, 1..]
    bip32.BIP32 nodeFromSeed = bip32.BIP32.fromSeed(HEX.decode(seed));
    String privateKey = HEX.encode(nodeFromSeed.privateKey);
    // => 0339a36013301597daef41f.....

    bip32.BIP32 nodeNeutered = nodeFromSeed.neutered();
    String publicKey = HEX.encode(nodeNeutered.publicKey);
    // => 02756de182c5dd4b717ea87e693006...
}

到目前为止我所尝试过的

  1. 我尝试直接使用BIP密钥,但不起作用
  2. 我尝试将私钥编码为base64并尝试使 手动证书。
String encoded = base64.encode(utf8.encode(privateKey));
var newPrivateKey = '-----BEGIN RSA PRIVATE KEY-----\n$encoded\n-----END RSA PRIVATE KEY-----';
  1. 我尝试使用 RSA libbasic_utils / CryptoUtils
  2. 解析密钥
dynamic newPrivateKey = crypto.RSAKeyParser().parse(privateKey);

RSAPrivateKey rsaPrivateKeyFromPemPkcs1(String pem);

不幸的是,这些选项都不适合我。

flutter encryption rsa encryption-asymmetric bip32
1个回答
0
投票

您可以使用椭圆曲线密钥对。您应该使用 Bip32 Seed 和 FixedSecureRandom 来制作密钥对

fun generateKeyPair(seed: ByteArray): KeyPair {
        Security.insertProviderAt(BouncyCastleProvider(), 1)
        var ecSpec =  ECNamedCurveTable.getParameterSpec("prime256v1")
        var generator =  KeyPairGenerator.getInstance("ECDSA", "SC")
        generator.initialize(ecSpec, FixedSecureRandom(seed))
        return generator.generateKeyPair()
}
© www.soinside.com 2019 - 2024. All rights reserved.