1. 程式人生 > >php和c#一致的DES加密解密演算法類

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

相關推薦

phpc#一致DES加密解密演算法

DES加解密演算法,在C#與PHP中的通用類。 注意: 1、類中的祕鑰key跟向量iv,均用的同樣的值 2、編碼均採用的utf-8 以下為具體程式碼,可以直接複製去進行實際測試 C#版程式碼: using System; using System.Data;

C#寫Des加密解密演算法

馬上就要實習了,求大大們介紹工作。QQ:1028962069 原始碼地址 http://download.csdn.net/detail/h1028962069/8618367 我只寫關鍵程式碼。 介面如下 類 using System; using System.Col

DES加密解密演算法C語言程式碼實現

程式碼: 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 /*------------------------ 5 定義列舉型全域性變數 6 -----

網路安全學習之C語言版DES加密解密演算法的程式設計與實現

其實明白了DES演算法的流程程式設計實現是不難的,當然可能會在S盒實現那碰到點問題。下面的DES演算法包括加密和解密兩個功能,主要有生成16個子金鑰和DES演算法的主程式組成。輸出的資訊有16輪子金鑰以及每輪的中間值以及最後的結果。具體的程式碼中都有註釋,就看程式碼吧。關於D

javac#的AES256加密解密方法

java CyptoClient.java中程式碼 package ***.security.crypto; import java.util.Map; import com.alibaba.fastjson.JSONObject; import com.google.common.

Java實現DES加密解密演算法

import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFact

C#實現DES加密解密封裝

{            byte[] keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 8));            byte[] keyIV = keyBytes;            byte[] inputByteArray = Convert.

Java Des加密解密工具

原文連結: 1、http://www.java2s.com/Code/Java/Security/EncryptingaStringwithDES.htm 2、http://www.avajava.com/tutorials/lessons/how-do-i-encrypt

php實現c#一致DES加密解密php中呼叫方法)

php實現和c#一致的DES加密解密,可以從網上搜到一大堆,但是測試後發現都沒法用。以下正確程式碼是我經過苦苦才找到的。希望大家在系統整合時能用的上。<p>注意:key的長度為8位以內。</p> //C# 版DES 加解密演算法 using Syst

PHP、JAVA、C#、Object-C、Android 通用的DES加密解密

PHP加密解密: class JoDES { private static $_instance = NULL; /** * @return JoDES */ public static function sh

加密解密演算法,客戶端C++加密,服務端PHP解密

這裡有兩個我之前經常用的加密/解密的字串函式: /** * 可逆的字串加密函式 * @param int $txtStream 待加密的字串內容 * @param int $password 加密密碼 * @return string 加密後的字串 */ public

C#/JAVA/PHP 互通DES解密演算法(ECB模式支援8位)

import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingE

C#des加密解密

length format esp lin div logs fin sin esc using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sy

phpjava中的加密解密

padding 而不是 bsp enc openss 解密 div des算法 -c 遇到的java代碼如下: Cipher cipher=Cipher.getInstance("DESede/CBC/PKCS5Padding"); 在php中使用des算法 始終校驗不

介紹三種PHP加密解密演算法

PHP加密解密演算法 這裡主要介紹三種常用的加密解密演算法: 方法一: /** * @param $string 要加密/解密的字串 * @param string $operation 型別,ENCODE 加密;DECODE 解密 * @param string

[C#] [安全] [加密解密] 逆向某GIS軟體驗證函式後生成的加密解密演算法

目錄 1.Intro 2.Details 3.Theory 4.Environment  5.Source 註冊機概覽: 註冊碼生成(加密模組): 註冊碼驗證(解密模組): 許可呼叫的功能模組: 6.Conclusion 1.Intro

golang常用加密解密演算法總結(AES、DES、RSA、Sha1MD5)

在專案開發過程中,當操作一些使用者的隱私資訊,諸如密碼、帳戶金鑰等資料時,往往需要加密後可以在網上傳輸。這時,需要一些高效地、簡單易用的加密演算法加密資料,然後把加密後的資料存入資料庫或進行其他操作;當需要讀取資料時,把加密後的資料取出來,再通過演算法解密。 關於加密解密 當前我們專案中常用

C++呼叫openssl實現DES加密解密cbc模式 zeropadding填充方式 pkcs5padding填充方式 pkcs7padding填充方式

==============================================     des   cbc  加密 zeropadding填充方式 ============================================== //加密 cbc ze

AESDES加密解密

AES連結:https://www.cnblogs.com/kongxincai/p/5996152.html DES連結:https://www.cnblogs.com/langtianya/p/3715975.html

java php DES 加密解密

Java程式碼   import java.io.IOException;   import java.security.SecureRandom;   import javax.crypto.Cipher;   import javax.crypto.SecretKey;   import jav