「東雲 忠太郎」の平凡な日常のできごと

「東雲 忠太郎」の平凡な日常のできごと

2024.08.04
XML
カテゴリ: WPFC#.NET


C# WPF アプリケーションで文字列をパスワードとして暗号化して保存し、後で複合化する方法について説明します。これには、.NET Framework の `System.Security.Cryptography` 名前空間を使用します。以下に基本的な例を示します。


## 1. 必要なライブラリのインポート



using System;

using System.IO;

using System.Security.Cryptography;

using System.Text;

```


## 2. 暗号化と復号化のメソッド


### 暗号化メソッド


```csharp

public static string EncryptString(string plainText, string password)

{

    byte[] iv = new byte[16];

    byte[] array;


    using (Aes aes = Aes.Create())

    {

        Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(password, Encoding.UTF8.GetBytes("SaltIsGoodForYou"));

        aes.Key = key.GetBytes(32);

        aes.IV = iv;


        ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);


        using (MemoryStream memoryStream = new MemoryStream())

        {

            using (CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))

            {

                using (StreamWriter streamWriter = new StreamWriter(cryptoStream))

                {

                    streamWriter.Write(plainText);

                }


                array = memoryStream.ToArray();

            }

        }

    }


    return Convert.ToBase64String(array);

}

```


### 複合化メソッド


```csharp

public static string DecryptString(string cipherText, string password)

{

    byte[] iv = new byte[16];

    byte[] buffer = Convert.FromBase64String(cipherText);


    using (Aes aes = Aes.Create())

    {

        Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(password, Encoding.UTF8.GetBytes("SaltIsGoodForYou"));

        aes.Key = key.GetBytes(32);

        aes.IV = iv;


        ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);


        using (MemoryStream memoryStream = new MemoryStream(buffer))

        {

            using (CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))

            {

                using (StreamReader streamReader = new StreamReader(cryptoStream))

                {

                    return streamReader.ReadToEnd();

                }

            }

        }

    }

}

```


## 3. 使用方法


```csharp

string original = "This is a secret message.";

string password = "P@ssw0rd";


string encrypted = EncryptString(original, password);

Console.WriteLine($"Encrypted: {encrypted}");


string decrypted = DecryptString(encrypted, password);

Console.WriteLine($"Decrypted: {decrypted}");

```


この例では、`EncryptString` メソッドを使用して文字列を暗号化し、`DecryptString` メソッドを使用して文字列を復号化しています。パスワードは、暗号化と復号化のためのキーを生成するために使用されます。


暗号化された文字列をファイルやデータベースに保存し、後でそれを読み込んで復号化することができます。この方法で、パスワードとして文字列を安全に保存および読み込むことができます。






お気に入りの記事を「いいね!」で応援しよう

Last updated  2024.08.04 00:58:23


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X
Design a Mobile Website
スマートフォン版を閲覧 | PC版を閲覧
Share by: