-
-
/**
- des 加密 解密
- */
- 類別 STD3Des
- {
- */
- 類別 STD3Des
- {
- 其中$key = "";
- private $iv = "";
/**
- * 構造,傳遞兩個已經進行base64_encode的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
- */
- 公用函數加密($value)
- {
- $td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');
- $iv = base64_decode($this->iv);
- $value = $this->PaddingPKCS7($value);
- $value = $this->PaddingPK7($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);
- 返回$ret;
- }
*解密
- * @param ; $value
- * @return
- */
- 公共函數解密($value)
- {
- $td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');
- $iv = base64_decode( $this->iv);
- $ $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);
- 回傳$ ret;
- }
-
- 回傳$ 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;
- } ;
外部函數UnPaddingPKCSCS7($text)
- {
- $pad = ord($text{strlen($text) - 1});
- if ($pad >; strlen($text)) {
- 回傳 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->加密($msg);echo $rs1.' '; $rs2 =$des->decrypt($rs1);echo $rs2;複製程式碼2、.net版本
-
-
//des 加密解密
- 密封公用類別CryptoHelper
- {
- /// ;
- /// 加密指定的輸入。
- ///
- /// 輸入。
- /// key
- /// iv
- ///
- public static string EncryptDes(string input, byte[] key, byte[] iv)
- {
- if (input == null || input.Length == 0)
- if (input == null || input.Length == 0)
- return String.Empty;
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
- MemoryStream ms = null;
- CryptoStream encStream = nullStream字串結果= String.Empty;
嘗試
- {
- ms = new MemoryStream();
//使用記憶體流和
- // CSP DES 金鑰建立CryptoStream。
- //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();
結果= Convert.ToBase64String(ms.GetBuffer(), 0, Convert.ToInt32(ms.Length, CultureInfo.InvariantCulture));
- }
- 最後
- {
- //關閉物件
- if (sw != null)
- sw. Close();
- if (encStream != null)
- encStream.Close();
- if (ms != null)
- ms.Close();
- }> ;
// 回傳加密字串
- 回傳結果;
- }
- ///
- /// 解密指定輸入。
- // /
- /// 輸入。
- /// key ;
- /// iv
- ///
- public static string DecryptDes(string input, byte[ ] key, byte[] iv)
- {
- byte[] buffer;
- try { buffer = Convert.FromBase64( input); }
- catch (System.ArgumentNullException) { return String.Empty; }
- // 長度為零,或不是四的偶數倍(加上一些其他情況)
- catch (System.FormatException ) { return String.Empty; }
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
- MemoryStream ms = null;
- CryptoStream encStream = null;Stream;
- 字串結果= String.Empty;
try
- {
- ms = new MemoryStream(buffer);
// 建立一個CryptoStream使用記憶體流和
- // CSP DES 金鑰。
- encStream = new CryptoStream(ms, des.CreateDecryptor(key, iv), CryptoStreamMode.Read);
sr = new StreamReader(encStream);
// 以字串形式讀取流。
- result = sr. ReadToEnd();
- }
- 最後
- {
- //關閉物件
- if (sr != null)
- sr.Close();
- if (encStream != null)
- encStream.Close();
- if (ms != null)
- ms.Close();
- }
回傳結果;
- }
- }
//呼叫
- string key = "abcdefgh";
- string iv = "abcdefgh";
- string msg ="test string";
- 字串rs1 = CryptoHelper.EncryptDes(msg, System.Text.Encoding.ASCII.GetBytes(key), System.Text.Encoding.ASCII.GetBytes(iv));
- 字元串rs2 = CryptoHelper. DecryptDes(rs1, System.Text.Encoding.ASCII.GetBytes(key), System.Text.Encoding.ASCII.GetBytes(iv));
-
-
複製程式碼
看完以上兩段程式碼,不知道你有收穫嗎?個人比較喜歡php版的des加密與解密方法,簡潔清晰。
腳本學堂(bbs.it-home.org),專心為您服務。
|