PHP实现和c#一致的DES加密解密,可以从网上搜到一大堆,但是测试后发现都没法用。以下正确代码是我经过苦苦才找到的。希望大家在系统整合时能用的上。

注意:key的长度为8位以内。
//C# 版DES 加解密算法
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;
public class Des{
//加解密密钥
private static string skey = "12345678";
//初始化向量
private static byte[] DESIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
#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);
//建立加密对象的密钥和偏移量
//原文使用ASCIIEncoding.ASCII方法的GetBytes方法
//使得输入密码必须输入英文文本
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
/// <summary>
///
/// </summary>
/// <param name="pToDecrypt"> 待解密的字符串</param>
/// <param name="sKey"> 解密密钥,要求为8字节,和加密密钥相同</param>
/// <returns>解密成功返回解密后的字符串,失败返源串</returns>
#region DESDeCode DES解密
public static string DESDeCode(string pToDecrypt, string sKey)
{
// HttpContext.Current.Response.Write(pToDecrypt + "<br>" + sKey);
// HttpContext.Current.Response.End();
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
class DES
{
var $key;
var $iv; //偏移量
function DES( $key, $iv=0 ) {
//key长度8例如:1234abcd
$this->key = $key;
if( $iv == 0 ) {
$this->iv = $key; //默认以$key 作为 iv
} else {
$this->iv = $iv; //mcrypt_create_iv ( mcrypt_get_block_size (MCRYPT_DES, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM );
}
}
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 );
}
}
?>
以上这篇php实现和c#一致的DES加密解密实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# php
# des加密解密
# php DES加密算法实例分析
# PHP实现基于3DES算法加密解密字符串示例
# PHP对称加密算法(DES/AES)类的实现代码
# PHP实现的DES加密解密封装类完整实例
# PHP简单实现DES加密解密的方法
# PHP中加密解密函数与DES加密解密实例
# 兼容PHP和Java的des加密解密代码分享
# 如何通过PHP实现Des加密算法代码实例
# 给大家
# 加密解密
# 偏移量
# 加解密
# 希望能
# 英文
# 希望大家
# 这篇
# 小编
# 大家多多
# 输入密码
# 长度为
# 没法用
# 网上
# pToEncrypt
# DESEnCode
# region
# Server
# HttpContext
# Current
相关文章:
建站之星如何取消后台验证码生成?
音响网站制作视频教程,隆霸音响官方网站?
如何在橙子建站上传落地页?操作指南详解
零基础网站服务器架设实战:轻量应用与域名解析配置指南
建设网站制作价格,怎样建立自己的公司网站?
韩国服务器如何优化跨境访问实现高效连接?
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
建站之星如何助力企业快速打造五合一网站?
如何快速生成可下载的建站源码工具?
网站好制作吗知乎,网站开发好学吗?有什么技巧?
贸易公司网站制作流程,出口贸易网站设计怎么做?
济南网站制作的价格,历城一职专官方网站?
如何在Golang中使用replace替换模块_指定本地或远程路径
如何在IIS服务器上快速部署高效网站?
如何通过多用户协作模板快速搭建高效企业网站?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
深入理解Android中的xmlns:tools属性
寿县云建站:智能SEO优化与多行业模板快速上线指南
如何用PHP快速搭建高效网站?分步指南
七夕网站制作视频,七夕大促活动怎么报名?
如何在建站主机中优化服务器配置?
建站之星收费标准详解:套餐费用及年费价格表一览
昆明网站制作哪家好,昆明公租房申请网上登录入口?
建站之星导航配置指南:自助建站与SEO优化全解析
建站主机服务器选型指南与性能优化方案解析
Python lxml的etree和ElementTree有什么区别
PHP 500报错的快速解决方法
江苏网站制作公司有哪些,江苏书法考级官方网站?
岳西云建站教程与模板下载_一站式快速建站系统操作指南
兔展官网 在线制作,怎样制作微信请帖?
赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?
如何获取免费开源的自助建站系统源码?
广德云建站网站建设方案与建站流程优化指南
定制建站流程步骤详解:一站式方案设计与开发指南
再谈Python中的字符串与字符编码(推荐)
招贴海报怎么做,什么是海报招贴?
微信小程序 五星评分(包括半颗星评分)实例代码
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
平台云上自主建站:模板化设计与智能工具打造高效网站
建站之星后台管理系统如何操作?
济南专业网站制作公司,济南信息工程学校怎么样?
企业微网站怎么做,公司网站和公众号有什么区别?
C#如何使用XPathNavigator高效查询XML
无锡营销型网站制作公司,无锡网选车牌流程?
如何在Windows服务器上快速搭建网站?
建站主机是什么?如何选择适合的建站主机?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。