-
-
- /**
- 暗号化復号化
- */
- class STD3Des
- {
- private $key = "";
- private $iv = "";
-
/**
- * 構築し、2 つの Base64_encoded KEY と IV を渡します
- *
- * @param string $key
- * @param string $iv
- */
- function __construct ($key, $iv)
- {
- if (empty($key) || empty($iv)) {
- echo 'key と iv が無効です';
- exit();
- }
- $this->key = $key;
- $this->iv = $iv;
- }
/**
- *暗号化
- * @param $value
- * @return
- * /
- パブリック関数 encrypt ($value)
- {
- $td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');
- $iv = Base64_decode($this->iv);
- $value = $this-> ;PaddingPKCS7($value);
- $key =base64_decode($this->key);
- mcrypt_generic_init($td, $key, $iv);
- $ret =base64_encode(mcrypt_generic($td, $value));
- mcrypt_generic_deinit($td);
- mcrypt_module_close($td);
- return $ret;
- }
/**
- *復号化
- * @param $value
- * @return
- */
- public function decrypt ($value)
- {
- $td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');
- $iv = Base64_decode($this->iv);
- $key = Base64_decode($this->key);
- mcrypt_generic_init($td, $key, $iv);
- $ret = trim(mdecrypt_generic($td,base64_decode($value)));
- $ret = $this->UnPaddingPKCS7($ret);
- mcrypt_generic_deinit($td);
- mcrypt_module_close ($td);
- return $ret;
- }
プライベート関数 PaddingPKCS7 ($data)
- {
- $block_size = mcrypt_get_block_size('tripledes', 'cbc');
- $padding_char = $block_size - (strlen($data) % $block_size);
- $data .= str_repeat(chr($padding_char), $padding_char);
- return $data;
- }
プライベート関数UnPaddingPKCS7($text)
- {
- $pad = ord($text{strlen($text) - 1});
- if ($pad > strlen($text)) {
- return false;
- }
- if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) {
- return false;
- }
- return substr($text, 0, - 1 * $pad);
- }
- }
//
- include('STD3Des.class.php');
- $key='abcdefgh'を使用します;
- $iv='abcdefgh';
- $msg='テスト文字列';
- $des=new STD3Des(base64_encode($key),base64_encode($iv));
- $rs1=$des->encrypt($ msg);
- echo $rs1.'
';
- $rs2=$des->decrypt($rs1);
- echo $rs2;
复制代
2、.net版本
-
-
//des 加密解密
- sealed public class CryptoHelper
- {
- ///
- /// 指定された入力を暗号化します。
- ///
- /// 入力。
- /// key
- /// iv
- ///
- public static string EncryptDes(string input, byte[] key, byte[] iv)
- {
- if (input == null || input.Length == 0)
- return String.Empty;
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
- MemoryStream ms = null;
- CryptoStream encStream = null;
- StreamWriter sw = null ;
- string result = String.Empty;
try
- {
- ms = new MemoryStream();
// メモリ ストリームを使用して CryptoStream を作成し、 the
- // CSP DES key.
- //des.Mode = CipherMode.CBC;
- //des.Padding = PaddingMode.PKCS7;
- encStream = new CryptoStream(ms, des.CreateEncryptor(key, iv), CryptoStreamMode.Write );
// ストリームに文字列を書き込む StreamWriter を作成します
- //
- sw = new StreamWriter(encStream);
// 書き込み平文をストリームに送信します。
- sw.Write(input);
sw.Flush();
- encStream.FlushFinalBlock();
- ms.Flush();
-
result = Convert.ToBase64String(ms.GetBuffer(), 0, Convert.ToInt32(ms.Length, CultureInfo.InvariantCulture));
- }
- finally
- {
- //オブジェクトを閉じる
- if (sw != null )
- sw.Close();
- if (encStream != null)
- encStream.Close();
- if (ms != null)
- ms.Close();
- }
// 暗号化された文字列を返します
- return result;
- }
- ///
- /// 指定された入力を復号化します
- ///
- /// 入力。
- /// key
- /// iv
- / //
- public static string DecryptDes(string input, byte[] key, byte[] iv)
- {
- byte[]buffer;
- try {buffer = Convert.FromBase64String(input); }
- catch (System.ArgumentNullException) { return String.Empty; }
- // 長さがゼロ、または 4 の偶数倍ではありません (さらに他のいくつかの場合)
- catch (System.FormatException) { return String.Empty; }
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
- MemoryStream ms = null;
- CryptoStream encStream = null;
- StreamReader sr = null;
- string result = String.Empty;
try
- {
- ms = new MemoryStream(buffer);
// メモリ ストリームと
- // CSP DES キーを使用して CryptoStream を作成します。
- encStream = new CryptoStream (ms, des.CreateDecryptor(key, iv), CryptoStreamMode.Read);
// ストリームを読み取るための StreamReader を作成します。
- sr = new StreamReader(encStream);
// ストリームを文字列として読み取ります。
- result = sr.ReadToEnd();
- }
- finally
- {
- //オブジェクトを閉じる
- if (sr != null)
- sr.Close();
- if (encStream != null)
- encStream.Close();
- if (ms != null)
- ms.Close();
- }
return result;
- }
- }< ;/p>
//调用
- string key = "abcdefgh";
- string iv = "abcdefgh";
- string msg="テスト文字列";
- string rs1 = CryptoHelper.EncryptDes(msg, System.Text) .Encoding.ASCII.GetBytes(key), System.Text.Encoding.ASCII.GetBytes(iv));
- string rs2 = CryptoHelper.DecryptDes(rs1, System.Text.Encoding.ASCII.GetBytes(key), System.Text .Encoding.ASCII.GetBytes(iv));
-
复制代码
看完以上二段代码,不知道你有收获没有?个人比较喜欢php版的des加密与解密方法、清晰。
脚本学堂(bbs.it-home.org),心は您。
|