|
php5.x版本,要添加php扩展php_mcrypt。
PHP版:
代码如下:class STD3Des { private $key = ""; private $iv = ""; /** * 构造,传递二个已经进行base64_encode的KEY与IV * * @param string $key * @param string $iv */ function __construct ($key,$iv) { if (empty($key) || empty($iv)) { echo 'key and iv is not valid'; exit(); } $this->key = $key; $this->iv = $iv; } /** *加密 * @param $value * @return */ public function 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,''); $iv = base64_decode($this->iv); $key = base64_decode($this->key); mcrypt_generic_init($td,$iv); $ret = trim(mdecrypt_generic($td,base64_decode($value))); $ret = $this->UnPaddingPKCS7($ret); mcrypt_generic_deinit($td); mcrypt_module_close($td); return $ret; } private function 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; } private function 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,- 1 * $pad); } } //使用 include('STD3Des.class.php'); $key='abcdefgh'; $iv='abcdefgh'; $msg='test string'; $des=new STD3Des(base64_encode($key),base64_encode($iv)); $rs1=$des->encrypt($msg); echo $rs1.' '; $rs2=$des->decrypt($rs1); echo $rs2;
.net版本
代码如下:sealed public class CryptoHelper { /// /// Encrypts the specified input. /// /// /// /// /// public static string DecryptDes(string input,byte[] iv) { byte[] buffer; try { buffer = Convert.FromBase64String(input); } catch (System.ArgumentNullException) { return String.Empty; } // length is zero,or not an even multiple of four (plus a few other cases) 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); // Create a CryptoStream using the memory stream and the // CSP DES key. encStream = new CryptoStream(ms,des.CreateDecryptor(key,CryptoStreamMode.Read); // Create a StreamReader for reading the stream. sr = new StreamReader(encStream); // Read the stream as a string. result = sr.ReadToEnd(); } finally { //close objects if (sr != null) sr.Close(); if (encStream != null) encStream.Close(); if (ms != null) ms.Close(); } return result; } } //调用string key = "abcdefgh"; string iv = "abcdefgh"; string msg="test string"; 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(iv));
(编辑:安卓应用网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|