たくさんの方法がありますが、実際には、コードを本当に保護したいのであれば、唯一の解決策は「プロの」製品を使用することです:-)車輪の再発明を試みないでください。これらの製品には通常、文字列を暗号化するオプションがあります。本当の問題は別の問題です。プロの製品がなくても(プロの製品があれば)、エキスパートはブレークポイントを設定して、ライブラリメソッドに渡されたパラメーター(たとえば、接続を開くパラメーター)を確認できます。さて...本当にコードの文字列を暗号化したいのなら、それはとても簡単です。しかし、それは役に立ちますか?いいえ。
さて、誰もこれを「答えではない」とマークしないように、簡単な暗号化/復号化コードを投稿します。
// Generate key. You do it once and save the key in the code
var encryptorForGenerateKey = Aes.Create();
encryptorForGenerateKey.BlockSize = 128;
encryptorForGenerateKey.KeySize = 128;
encryptorForGenerateKey.GenerateKey();
encryptorForGenerateKey.GenerateIV();
var key = encryptorForGenerateKey.Key;
var iv = encryptorForGenerateKey.IV;
// Encrypt: this code doesn't need to be in the program. You create a console
// program to do it
var encryptor = Aes.Create();
var encryptorTransformer = encryptorForGenerateKey.CreateEncryptor(key, iv);
string str = "Hello world";
var bytes = Encoding.UTF8.GetBytes(str);
var encrypted = encryptorTransformer.TransformFinalBlock(bytes, 0, bytes.Length);
var encryptedString = Convert.ToBase64String(encrypted);
Console.WriteLine(encryptedString);
// Decrypt: this code needs to be in the program
var decryptor = Aes.Create();
var decryptorTransformer = decryptor.CreateDecryptor(key, iv);
byte[] encrypted2 = Convert.FromBase64String(encryptedString)
var result = decryptorTransformer.TransformFinalBlock(encrypted2, 0, encrypted2.Length);
var str2 = Encoding.UTF8.GetString(result);
このコードは明らかに安全ではありません。誰でもプログラムを逆コンパイルし、を追加しConsole.WriteLine(str2)
て再コンパイルすることができます。