Heim >Backend-Entwicklung >PHP-Tutorial >php和c#一致的DES加密解密算法类

php和c#一致的DES加密解密算法类

WBOY
WBOYOriginal
2016-07-29 09:04:15940Durchsuche

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 <br>PHP版代码:<p></p><pre code_snippet_id="1573545" snippet_file_name="blog_20160203_2_2266910" name="code"><?php //PHP 版DES 加解密算法类
class DES {
	var $key;
	var $iv; //偏移量
	
	function DES($key) {
		//key长度为8位,例如:1234abcd
		$this->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 ( $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,'<br>';
echo '加密秘钥key:',$key,'<br><br>';
echo '加密后字符串:',$str_en_des,'<br>';
echo '解密后字符串:',$str_de_des,'<br>';

?>

代码均经过网上搜索进行整理,特别感谢博文:http://blog.csdn.net/e421083458/article/details/39373815

以上就介绍了php和c#一致的DES加密解密算法类,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn