0

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

在我看来,做到这一点的一个好方法是通过椭圆曲线密码学。

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

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

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;
4

0 回答 0