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

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版代码:

<?php
//PHP 版DES 加解密算法类
class DES {
	var $key;
	var $iv; //偏移量
	
	function __construct($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 ( $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,'<br>';
echo '加密秘钥key:',$key,'<br><br>';
echo '加密后字符串:',$str_en_des,'<br>';
echo '解密后字符串:',$str_de_des,'<br>';

?>

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,针对您的问题,我可以给您提供一些参考。 DES算法加密解密示例代码: ```csharp using System; using System.IO; using System.Security.Cryptography; public class DESExample { private static readonly byte[] Key = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 }; private static readonly byte[] IV = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 }; public static void EncryptFile(string inputFilePath, string outputFilePath) { using var des = new DESCryptoServiceProvider(); using var inputStream = new FileStream(inputFilePath, FileMode.Open, FileAccess.Read); using var outputStream = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write); des.Key = Key; des.IV = IV; using var encryptor = des.CreateEncryptor(); using var cryptoStream = new CryptoStream(outputStream, encryptor, CryptoStreamMode.Write); inputStream.CopyTo(cryptoStream); cryptoStream.FlushFinalBlock(); } public static void DecryptFile(string inputFilePath, string outputFilePath) { using var des = new DESCryptoServiceProvider(); using var inputStream = new FileStream(inputFilePath, FileMode.Open, FileAccess.Read); using var outputStream = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write); des.Key = Key; des.IV = IV; using var decryptor = des.CreateDecryptor(); using var cryptoStream = new CryptoStream(inputStream, decryptor, CryptoStreamMode.Read); cryptoStream.CopyTo(outputStream); outputStream.Flush(); } } ``` RSA算法加密解密示例代码: ```csharp using System; using System.IO; using System.Security.Cryptography; public class RSAExample { private static readonly string PublicKey = "<RSAKeyValue><Modulus>oKI2Hxg7K5Hd6d8DT7+7p6vqoLJpFwNpkBzv/k4rZKw86hs2Gx9zTt2+JzLJ3VYsZq8YfK0V0d85t2c+Jq3D7BjnsiP9i4j6kOaRc7v7GKv4rRAc7S6t7WhrFVg+KQ9dZ5iM6NhrX7oOqB5hLb7p9eN+5VB9X4IWFSz+Q3YE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>"; private static readonly string PrivateKey = "<RSAKeyValue><Modulus>oKI2Hxg7K5Hd6d8DT7+7p6vqoLJpFwNpkBzv/k4rZKw86hs2Gx9zTt2+JzLJ3VYsZq8YfK0V0d85t2c+Jq3D7BjnsiP9i4j6kOaRc7v7GKv4rRAc7S6t7WhrFVg+KQ9dZ5iM6NhrX7oOqB5hLb7p9eN+5VB9X4IWFSz+Q3YE=</Modulus><Exponent>AQAB</Exponent><P>6DdR7M/CuFjyF3v6MfTnW8MhFwM8Wt4GpBZG9e+y5L8=</P><Q>6J3f2gPQy7E1k1PbR+0WwC5yZPQ/N4WZ4GQvyXq1r5I=</Q><DP>bqbN+qWZJ+Oul9F73BvKm4JNm91qMpbkzqx4WovhD9k=</DP><DQ>Y7e4CKD+5pwu7e4oCzIYs0E3LlUWJf4LkLwN+3Q6w6U=</DQ><InverseQ>g4TlKvQf7r6jVQK2lRrV4Zar0hN6I4oWU1Lm9p1zvAo=</InverseQ><D>aeHvIhO4+Yk7bW+4qo7w5yJjWjyWz3mVW5l1mLb0h8JtPZV12qY8jMHZ0cNzUJ7a1Z1IjWkN73uU+qT0O4O5ZQK0ZyO0zj8FIAJn5wJj7rP8Lw5Ll5Qk7K1jy6h0J0O3mY9Hf6Lg2X4L2u6G4LrD5kiJ8Y2nWZL3V7E0e6YB0=</D></RSAKeyValue>"; public static void EncryptFile(string inputFilePath, string outputFilePath) { using var rsa = new RSACryptoServiceProvider(); rsa.FromXmlString(PublicKey); using var inputStream = new FileStream(inputFilePath, FileMode.Open, FileAccess.Read); using var outputStream = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write); using var encryptor = rsa.CreateEncryptor(); using var cryptoStream = new CryptoStream(outputStream, encryptor, CryptoStreamMode.Write); inputStream.CopyTo(cryptoStream); cryptoStream.FlushFinalBlock(); } public static void DecryptFile(string inputFilePath, string outputFilePath) { using var rsa = new RSACryptoServiceProvider(); rsa.FromXmlString(PrivateKey); using var inputStream = new FileStream(inputFilePath, FileMode.Open, FileAccess.Read); using var outputStream = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write); using var decryptor = rsa.CreateDecryptor(); using var cryptoStream = new CryptoStream(inputStream, decryptor, CryptoStreamMode.Read); cryptoStream.CopyTo(outputStream); outputStream.Flush(); } } ``` 以上代码仅供参考,具体实现需要根据您的需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值