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
相关文章:
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
制作网站的基本流程,设计网站的软件是什么?
如何快速搭建高效服务器建站系统?
如何在阿里云完成域名注册与建站?
c++怎么用jemalloc c++替换默认内存分配器【性能】
建站主机助手选型指南:2025年热门推荐与高效部署技巧
网站好制作吗知乎,网站开发好学吗?有什么技巧?
如何批量查询域名的建站时间记录?
大型企业网站制作流程,做网站需要注册公司吗?
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
如何将凡科建站内容保存为本地文件?
宁波免费建站如何选择可靠模板与平台?
制作农业网站的软件,比较好的农业网站推荐一下?
如何通过山东自助建站平台快速注册域名?
独立制作一个网站多少钱,建立网站需要花多少钱?
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
如何在IIS中配置站点IP、端口及主机头?
宝塔面板如何快速创建新站点?
如何用wdcp快速搭建高效网站?
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
如何正确下载安装西数主机建站助手?
学校为何禁止电信移动建设网站?
网站制作服务平台,有什么网站可以发布本地服务信息?
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
长沙企业网站制作哪家好,长沙水业集团官方网站?
网站制作话术技巧,网站推广做的好怎么话术?
装修招标网站设计制作流程,装修招标流程?
家具网站制作软件,家具厂怎么跑业务?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
广州建站公司哪家好?十大优质服务商推荐
深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?
建站之星免费模板:自助建站系统与智能响应式一键生成
建站之星后台密码如何安全设置与找回?
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
如何通过可视化优化提升建站效果?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
开封网站制作公司,网络用语开封是什么意思?
海南网站制作公司有哪些,海口网是哪家的?
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
如何快速打造个性化非模板自助建站?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
名字制作网站免费,所有小说网站的名字?
移民网站制作流程,怎么看加拿大移民官网?
jQuery 常见小例汇总
如何在Golang中引入测试模块_Golang测试包导入与使用实践
制作网站的模板软件,网站怎么建设?
如何通过免费商城建站系统源码自定义网站主题与功能?
*请认真填写需求信息,我们会在24小时内与您取得联系。