DES加解密演算法,在C#與PHP中的通用類。
注意:
1、類中的秘鑰key跟向量iv,均用的同樣的值
2、編碼均採用的utf-8
以下為具體代碼,可以直接複製去進行實際測試
C#版代碼:
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data.SqlClient; using System.Security.Cryptography; using System.IO; using System.Text; //C# 版DES 加解密演算法類public class Des{ //加解密密鑰 private static string skey = "12345678";#region DESEnCode DES加密 public static string DESEnCode(string pToEncrypt, string sKey) { pToEncrypt = HttpContext.Current.Server.UrlEncode(pToEncrypt); DESCryptoServiceProvider des = new DESCryptoServiceProvider(); byte[] inputByteArray = Encoding.GetEncoding("UTF-8").GetBytes(pToEncrypt); 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 (byte b in ms.ToArray()) { ret.AppendFormat("{0:X2}", b); } ret.ToString(); return ret.ToString(); } #endregion #region DESDeCode DES解密public static string DESDeCode(string pToDecrypt, string sKey){DESCryptoServiceProvider des = new DESCryptoServiceProvider();byte[] inputByteArray = new byte[pToDecrypt.Length / 2];for (int x = 0; x < pToDecrypt.Length / 2; x++){int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));inputByteArray[x] = (byte)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(); StringBuilder ret = new StringBuilder(); return HttpContext.Current.Server.UrlDecode(System.Text.Encoding.Default.GetString(ms.ToArray()));} #endregion }
PHP版代碼:
key = $key;$this->iv = $key; //預設以$key 作為 iv}//加密function encrypt($str) {$size = mcrypt_get_block_size ( MCRYPT_DES, MCRYPT_MODE_CBC );$str = $this->pkcs5Pad ( $str, $size );return strtoupper( bin2hex( mcrypt_cbc(MCRYPT_DES, $this->key, $str, MCRYPT_ENCRYPT, $this->iv ) ) );}//解密function decrypt($str) {$strBin = $this->hex2bin( strtolower( $str ) );$str = mcrypt_cbc( MCRYPT_DES, $this->key, $strBin, MCRYPT_DECRYPT, $this->iv );$str = $this->pkcs5Unpad( $str );return $str;}function hex2bin($hexData) {$binData = "";for($i = 0; $i < strlen ( $hexData ); $i += 2) {$binData .= chr ( hexdec ( substr ( $hexData, $i, 2 ) ) );}return $binData;}function pkcs5Pad($text, $blocksize) {$pad = $blocksize - (strlen ( $text ) % $blocksize);return $text . str_repeat ( chr ( $pad ), $pad );}function pkcs5Unpad($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 );}}header("Content-type: text/html; charset=utf-8");$key = '12345678';$str = 'abc.123';$des = new DES($key);$str_en_des = $des->encrypt($str); //加密字串$str_de_des = $des->decrypt($str_en_des); //解密字串echo '加密字串:',$str,'
';echo '加密秘鑰key:',$key,'
';echo '加密後字串:',$str_en_des,'
';echo '解密後字串:',$str_de_des,'
';?>
代碼均經過網上搜尋進行整理,特別感謝博文:http://blog.csdn.net/e421083458/article/details/39373815
以上就介紹了php和c#一致的DES加密解密演算法類,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。