我想加密服务器上的某些数据,这样如果有人访问数据库和代码库,秘密数据就不会受到损害。
在我看来,这是一个很好的方法,通过椭圆曲线加密。
我想知道如何在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;