3DESやAESのように暗号用のキー情報を保持する必要はありませんが、故障などでマシンが死亡すると復旧できません。 コードはこんなかんじ。
(ボタン押下の処理です。txtHashはTextBox。共通処理は3DESと同じ)
/// <summary>
/// DPAPIで暗号化
/// </summary>
/// <remarks>system.security.dllが必要</remarks>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnDPC_Click(object sender, EventArgs e)
{
//対象を16進バイト列化
byte[] data = Encoding.UTF8.GetBytes(txtOriginal.Text);
//バイト列を暗号化
byte[] encData = ProtectedData.Protect(data
, entropy //暗号用追加バイト列
, DataProtectionScope.LocalMachine);//暗号化スコープ(マシン範囲)
//16進数文字列に変換
txtHash.Text = byte2HexString(encData);
}
/// <summary>
/// DPAPI複合化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnDPD_Click(object sender, EventArgs e)
{
//対象を16進バイト列化
byte[] data = hexString2Byte(txtHash.Text);
//バイト列を複合化
byte[] decData = ProtectedData.Unprotect(data
, entropy //暗号用追加バイト列
, DataProtectionScope.LocalMachine);//暗号化スコープ(マシン範囲)
// 複合化されたデータを取得
string code = Encoding.UTF8.GetString(decData);
txtRestre.Text = code;
}
/// DPAPIで暗号化
/// </summary>
/// <remarks>system.security.dllが必要</remarks>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnDPC_Click(object sender, EventArgs e)
{
//対象を16進バイト列化
byte[] data = Encoding.UTF8.GetBytes(txtOriginal.Text);
//バイト列を暗号化
byte[] encData = ProtectedData.Protect(data
, entropy //暗号用追加バイト列
, DataProtectionScope.LocalMachine);//暗号化スコープ(マシン範囲)
//16進数文字列に変換
txtHash.Text = byte2HexString(encData);
}
/// <summary>
/// DPAPI複合化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnDPD_Click(object sender, EventArgs e)
{
//対象を16進バイト列化
byte[] data = hexString2Byte(txtHash.Text);
//バイト列を複合化
byte[] decData = ProtectedData.Unprotect(data
, entropy //暗号用追加バイト列
, DataProtectionScope.LocalMachine);//暗号化スコープ(マシン範囲)
// 複合化されたデータを取得
string code = Encoding.UTF8.GetString(decData);
txtRestre.Text = code;
}
0 件のコメント:
コメントを投稿