我可以使用椭圆曲线密码作为C#中带有Bouncy Castle的密码吗?

我可以使用椭圆曲线密码作为C#中带有Bouncy Castle的密码吗?,c#,bouncycastle,public-key-encryption,C#,Bouncycastle,Public Key Encryption,我想加密服务器上的一些数据,这样如果有人访问数据库和代码库,机密数据就不会被泄露 在我看来,这样做的一个好方法是通过椭圆曲线加密 我想知道如何在家里做这件事?我在谷歌上搜索过,读过一些博客文章,但它们生成的密钥与字符串无关,我不知道如何用密码实现它,而且我不想出错 基本上我想要这样的东西: var privateKey = GetPrivateKey("secretpassword"); var publicKey = GetPublicKey(privateKey); string dat

我想加密服务器上的一些数据,这样如果有人访问数据库和代码库,机密数据就不会被泄露

在我看来,这样做的一个好方法是通过椭圆曲线加密

我想知道如何在家里做这件事?我在谷歌上搜索过,读过一些博客文章,但它们生成的密钥与字符串无关,我不知道如何用密码实现它,而且我不想出错

基本上我想要这样的东西:

var privateKey = GetPrivateKey("secretpassword");
var publicKey = GetPublicKey(privateKey);


string data = "secret data";
var encryptedData = encryptData(publicKey, data);
string data2 = unencryptData(privateKey, data);

Assert.AreEqual(data, data2);
这是我目前正在进行的工作:

    string password = "n55xSMb7J7n7K8zBRn"; // this will not be hardcoded in the application. It will come from a password prompt
    byte[] salt = ASCIIEncoding.UTF8.GetBytes(password + password);
    int iterations = 5;
    int keySizeInBits = 32;
    Pkcs5S2ParametersGenerator generator = new Pkcs5S2ParametersGenerator(new Sha256Digest());
    generator.Init(PbeParametersGenerator.Pkcs5PasswordToUtf8Bytes(password.ToCharArray()), salt, iterations);
    KeyParameter key = (KeyParameter)generator.GenerateDerivedMacParameters(keySizeInBits);
    byte[] k = key.GetKey();


    X9ECParameters ecP = Org.BouncyCastle.Asn1.Sec.SecNamedCurves.GetByName("secp256k1");
    ECDomainParameters ecSpec = new ECDomainParameters(ecP.Curve, ecP.G, ecP.N, ecP.H, ecP.GetSeed());
    IAsymmetricCipherKeyPairGenerator g = GeneratorUtilities.GetKeyPairGenerator("ECDSA");
    g.Init(new ECKeyGenerationParameters(ecSpec, new SecureRandom(k)));
    AsymmetricCipherKeyPair aKeyPair = g.GenerateKeyPair();
    AsymmetricKeyParameter privateK = aKeyPair.Private;
    AsymmetricKeyParameter publicK = aKeyPair.Public;

为什么是密码?你就不能用正确的随机键吗?很明显,为了安全起见,您不能将私钥保存在服务器上。谢谢您的回复。我想运行一个进程,输入密码以访问数据。我想使用类似LastPass的东西,私钥是什么并不重要。。。同意不在服务器上保留私钥。在这种情况下,我仍然会创建一个随机ECC密钥,但加密是基于密码的加密。这涉及到一个合适的密码散列,如scrypt或PBKDF2。您是否需要这样的情况:每个人都可以加密数据,只有您作为私钥所有者才能解密数据?如果不是,为什么要在这里使用非对称加密?它的主要目的是为数据创建数字签名。虽然椭圆曲线密码术是可能的,但对称算法更适合于加密/解密任务。@DenPakizh只有我需要访问它。我的理解是,如果有人破坏了数据库和代码库,他们将能够用对称算法解密数据,而非对称算法则不能。也许我错了?