プレーンコピーをクリップボードプリントに表示しますか?
//ネームスペース
システムを使用する;
System.Security.Cryptography を使用します。
System.IO を使用します。
System.Text を使用します。
//方法
//暗号化方式
パブリック文字列暗号化(文字列 pToEncrypt, 文字列 sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
//文字列をバイト配列に入れます
//元々使用していたUTF8エンコーディングをUnicodeエンコーディングに変更しましたが、機能しません。
byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
//byte[] inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);
//暗号化されたオブジェクトのキーとオフセットを確立します
//元のテキストは ASCIIEncoding.ASCII メソッドの GetBytes メソッドを使用します。
// パスワード入力時に英語入力を必須にする
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(),CryptoStreamMode.Write);
// バイト配列を暗号ストリームに書き込みます
//(最終的にはメモリストリームに行きます)
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
// メモリ ストリームからデータを取得し、文字列に変換します
StringBuilder ret = new StringBuilder();
foreach(ms.ToArray() のバイト b)
{
//16 進形式でフォーマットする
ret.AppendFormat("{0:X2}", b);
}
ret.ToString();
ret.ToString()を返します;
}
//復号化メソッド
パブリック文字列 Decrypt(文字列 pToDecrypt, 文字列 sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
//入力文字列をバイト配列に代入します
byte[] inputByteArray = 新しいバイト[pToDecrypt.Length / 2];
for(int x = 0; x < pToDecrypt.Length / 2; x++)
{
int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
inputByteArray[x] = (バイト)i;
}
//暗号化されたオブジェクトのキーとオフセットを確立します。この値は重要なので変更できません。
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(),CryptoStreamMode.Write);
//暗号ストリームを介してデータをメモリ ストリームにフラッシュします
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
// 復号化されたデータをメモリ ストリームから取得します。
//StringBuild オブジェクトを作成します。CreateDecrypt はストリーム オブジェクトを使用するため、復号化されたテキストをストリーム オブジェクトに変換する必要があります。
StringBuilder ret = new StringBuilder();
戻り System.Text.Encoding.Default.GetString(ms.ToArray());
}
//------コードが完成しました----------------------
//名前空間
システムを使用する;
System.Security.Cryptography を使用します。
System.IO を使用します。
System.Text を使用します。
//方法
//暗号化方式
パブリック文字列暗号化(文字列 pToEncrypt, 文字列 sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
//文字列をバイト配列に入れます
//元々使用していたUTF8エンコーディングをUnicodeエンコーディングに変更しましたが、機能しません。
byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
//byte[] inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);
//暗号化されたオブジェクトのキーとオフセットを確立します
//元のテキストは ASCIIEncoding.ASCII メソッドの GetBytes メソッドを使用します。
// パスワード入力時に英語入力を必須にする
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(),CryptoStreamMode.Write);
// バイト配列を暗号ストリームに書き込みます
//(最終的にはメモリストリームに行きます)
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
// メモリ ストリームからデータを取得し、文字列に変換します
StringBuilder ret = new StringBuilder();
foreach(ms.ToArray() のバイト b)
{
//16 進形式でフォーマットする
ret.AppendFormat("{0:X2}", b);
}
ret.ToString();
ret.ToString()を返します;
}
//復号化メソッド
パブリック文字列 Decrypt(文字列 pToDecrypt, 文字列 sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
//入力文字列をバイト配列に代入します
byte[] inputByteArray = 新しいバイト[pToDecrypt.Length / 2];
for(int x = 0; x < pToDecrypt.Length / 2; x++)
{
int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
inputByteArray[x] = (バイト)i;
}
//暗号化されたオブジェクトのキーとオフセットを確立します。この値は重要なので変更できません。
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(),CryptoStreamMode.Write);
//暗号ストリームを介してデータをメモリ ストリームにフラッシュします
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
// 復号化されたデータをメモリ ストリームから取得します。
//StringBuild オブジェクトを作成します。CreateDecrypt はストリーム オブジェクトを使用するため、復号化されたテキストをストリーム オブジェクトに変換する必要があります。
StringBuilder ret = new StringBuilder();
戻り System.Text.Encoding.Default.GetString(ms.ToArray());
}
//-----コードが完成しました---------------------
注: sKey にパスワードを入力するときは、大文字と小文字が区別される英語の文字を使用する必要があります。文字数は 8 文字で、それ以上でもそれ以下でもありません。そうしないとエラーが発生します。
Windows2000 Server .Net Framework SP3 を使用していますが、VS.Net 下の asp.net で正常に使用されており、暗号化と復号化も正常に行われています。