C#で3DES で暗号化・復号化してみました。
初期化ベクタとキーと2つ値が必要なのが分かりにくい所ですね。あとそれらのデータ型がなんなのかも。
using System.IO;
using System.Security.Cryptography;
using System.Text;
namespace TEST.Common.Crypt
{
public class Crypt
{
// 鍵
// 128 ビットから 192 ビットのキー長を 64 ビット単位でサポート
// つまり16バイトか24バイト
// 1234567890123456
//private const string CKEY = "bPE7eIw0OZojj0XZ";
// 123456789012345678901234
private const string CKEY = "a7nH8sMrqDeNtiS99jyOzgpF";
// 初期化ベクタ(8バイト)
// 12345678
private const string CVEC = "lumw7kVi";
// 暗号化
public static string Encrypt(string str)
{
// 暗号化する文字列を byte 配列に変換
byte[] src = Encoding.UTF8.GetBytes(str);
// 暗号用のキー情報をセット
byte[] desKey = Encoding.UTF8.GetBytes(CKEY);
byte[] desIV = Encoding.UTF8.GetBytes(CVEC);
// Tripe DES のサービス プロバイダを生成
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
// 入出力用のストリームを生成
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(desKey, desIV), CryptoStreamMode.Write);
// ストリームに暗号化するデータを書き込む
cs.Write(src, 0, src.Length);
cs.Close();
// 暗号化されたデータを byte 配列で取得
byte[] cryptData = ms.ToArray();
ms.Close();
// Base64で文字列に変換
return System.Convert.ToBase64String(cryptData);
}
// 復号化
public static string Decrypt(string str)
{
// Base64から byte 配列に変換
byte[] src = System.Convert.FromBase64String(str);
// 暗号用のキー情報をセット
byte[] desKey = Encoding.UTF8.GetBytes(CKEY);
byte[] desIV = Encoding.UTF8.GetBytes(CVEC);
// Tripe DES のサービス プロバイダを生成
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
// 入出力用のストリームを生成
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(desKey, desIV), CryptoStreamMode.Write);
// ストリームに復号化するデータを書き込む
cs.Write(src, 0, src.Length);
cs.Close();
// 復号化されたデータを byte 配列で取得
byte[] cryptData = ms.ToArray();
ms.Close();
// 文字列に変換
return Encoding.UTF8.GetString(cryptData);
}
}
}