1

プログラム内の短いテキストボックスまたは文字列 (ファイルではない) を暗号化して、その内容を人間が読み取れないようにするか、安全な単純な暗号化で暗号化します (機密性の高いパスワードなど)。Visual Basic では、これを行うのに簡単な 5 ライナーがありましたが、C# にコピーすると C# では機能しません。適切なものが見つかりませんでした。膨大な量のコードが必要な非常に難しい例しかありません。ほとんどの場合、多くのエラーがスローされ、複雑なキー、キーペア、ハッシュ、utf エンコーディング、またはその両方を設定して機能させる必要がありますが、決してそうではありません。私にはそのすべての手がかりがなく、暗号化の両方の方法で機能する単純な関数が必要です。エラーなしで実際に動作し、ジョブを前後に実行する C# のようなものは見つかりませんでした。

または、以下のコード サンプルを機能させるにはどうすればよいでしょうか。これは最も有望なものです。C# の button1_click イベントでコピーすると、多くのエラーが発生します。

エラー 1: タイプまたは名前空間の定義またはファイルの終わりが必要です

エラー 2: タイプまたは名前空間「TripleDESCryptoServiceProvider」が見つかりませんでした

エラー 3:「CipherMode」は現在のコンテキストに存在しません

エラー 4: "Getkey" は現在のコンテキストに存在しません

エラー 5: "PaddingMode" は現在のコンテキストに存在しません エラー 6: エラー 8 タイプまたは名前空間名 'ICryptoTransform' が見つかりませんでした (using ディレクティブまたは essemble 参照がありませんか?)

public static string Encrypt(string data)
{
    TripleDESCryptoServiceProvider DES = new TripleDESCryptoServiceProvider();

    DES.Mode = CipherMode.ECB;
    DES.Key = GetKey("a1!B78s!5(");

    DES.Padding = PaddingMode.PKCS7;
    ICryptoTransform DESEncrypt = DES.CreateEncryptor();
    Byte[] Buffer = ASCIIEncoding.ASCII.GetBytes(data);

    return Convert.ToBase64String(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
}

public static string Decrypt(string data)
{
    TripleDESCryptoServiceProvider DES = new TripleDESCryptoServiceProvider();

    DES.Mode = CipherMode.ECB;
    DES.Key = GetKey("a1!B78s!5(");

    DES.Padding = PaddingMode.PKCS7;
    ICryptoTransform DESEncrypt = DES.CreateDecryptor();
    Byte[] Buffer = Convert.FromBase64String(data.Replace(" ","+"));

    return Encoding.UTF8.GetString(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
}
4

6 に答える 6

1

Jesse C. Slicer からの受け入れられた回答を補完する、ここに「GetKey」コードがあります。ここで見つけました

  private static byte[] GetKey(string password)
  {
     string pwd = null;

     if (Encoding.UTF8.GetByteCount(password) < 24)
     {
         pwd = password.PadRight(24, ' ');
     }
     else
     {
         pwd = password.Substring(0, 24);
     }
     return Encoding.UTF8.GetBytes(pwd);
  }
于 2015-05-12T09:55:41.500 に答える