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