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
相關推薦
php和c#一致的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
java和c#的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
php和java中的加密和解密
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
AES和DES加密解密
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