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

时间:2013-11-06 18:19:38

标签: c# bouncycastle public-key-encryption

我想加密服务器上的某些数据,这样如果有人访问数据库和代码库,秘密数据就不会受到损害。

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

我想知道如何在Bouncy Castle中执行此操作?我已经用Google搜索并阅读了一些博客文章,但它们会生成与字符串无关的密钥,而且我不确定如何使用密码实现它,而且我不想犯错误。

基本上我喜欢这样的东西:

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;

0 个答案:

没有答案