PHP和.NET关于3DES加密兼容问题
下面是我的C#加解密代码: classDES { //密钥 privateconststringsKey="nuhyrn83Y9LNeygnpq7AMN0aeRQN7kuv"; //矢量,矢量可以为空 privateconststringsIV="qciO6X+aPLw="; ///summary ///加密 ////summary ///paramname="Value"明文/param ///returns密文ba
下面是我的C#加解密代码:
class DES
{
//密钥
private const string sKey = "nuhyrn83Y9LNeygnpq7AMN0aeRQN7kuv";
//矢量,矢量可以为空
private const string sIV = "qciO6X+aPLw=";
///
/// 加密
///
/// 明文
///
public static string EncryptString(string Value)
{
SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();
ICryptoTransform ct;
MemoryStream ms;
CryptoStream cs;
byte[] byt;
mCSP.Key = Convert.FromBase64String(sKey);
mCSP.IV = Convert.FromBase64String(sIV);
Console.WriteLine("Key:" + mCSP.Key.ToString() + ",IV:" + mCSP.IV.ToString());
//指定加密的运算模式
mCSP.Mode = System.Security.Cryptography.CipherMode.ECB;
//获取或设置加密算法的填充模式
mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV);
byt = Encoding.UTF8.GetBytes(Value);
ms = new MemoryStream();
cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
cs.Write(byt, 0, byt.Length);
cs.FlushFinalBlock();
cs.Close();
return Convert.ToBase64String(ms.ToArray());
}
///
/// 解密
///
/// base64转码密文
///
public static string DecryptString(string Value)
{
SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();
ICryptoTransform ct;
MemoryStream ms;
CryptoStream cs;
byte[] byt;
mCSP.Key = Convert.FromBase64String(sKey);
mCSP.IV = Convert.FromBase64String(sIV);
mCSP.Mode = System.Security.Cryptography.CipherMode.ECB;
mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);
byt = Convert.FromBase64String(Value);
ms = new MemoryStream();
cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
cs.Write(byt, 0, byt.Length);
cs.FlushFinalBlock();
cs.Close();
return Encoding.UTF8.GetString(ms.ToArray());
}
}
下面是我的PHP加解密代码:
class DesCrypt {
/**
* 使用3DES加密源数据
* @param string $oriSource 源数据
* @param string $key 密钥
* @param string $defaultIV 加解密向量
* @return string $result 密文
*/
public function encryptByTDES($oriSource, $key, $defaultIV) {
$key = base64_decode ( $key ); //结果为24位
$iv = base64_decode ( $defaultIV ); //结果为8位
$oriSource = $this->addPKCS7Padding ( $oriSource );
$td = mcrypt_module_open ( MCRYPT_3DES, '', MCRYPT_MODE_CBC, '' );
mcrypt_generic_init ( $td, $key, $iv );
$result = mcrypt_generic ( $td, $oriSource );
mcrypt_generic_deinit ( $td );
mcrypt_module_close ( $td );
$result = base64_encode ( $result );
return $result;
}
/**
* 使用3DES解密密文
* @param string $encryptedData 密文
* @param string $key 密钥
* @param string $defaultIV 加解密向量
* @return string $result 解密后的原文
*/
public function decryptByTDES($encryptedData, $key, $defaultIV) {
$key = base64_decode ( $key ); //结果为24位
$iv = base64_decode ( $defaultIV ); //结果为8位
$encryptedData = base64_decode ( $encryptedData );
$td = mcrypt_module_open ( MCRYPT_3DES, '', MCRYPT_MODE_CBC, '' );
mcrypt_generic_init ( $td, $key, $iv );
$result = mdecrypt_generic ( $td, $encryptedData );
mcrypt_generic_deinit ( $td );
mcrypt_module_close ( $td );
$result = $this->stripPKSC7Padding ( $result );
return $result;
}
/**
* 为字符串添加PKCS7 Padding
* @param string $source 源字符串
*/
private function addPKCS7Padding($source) {
$block = mcrypt_get_block_size ( 'tripledes', 'cbc' );
$pad = $block - (strlen ( $source ) % $block);
if ($pad
$char = chr ( $pad );
$source .= str_repeat ( $char, $pad );
}
return $source;
}
/**
* 去除字符串末尾的PKCS7 Padding
* @param string $source 带有padding字符的字符串
*/
public function stripPKSC7Padding($source) {
$block = mcrypt_get_block_size ( 'tripledes', 'cbc' );
$char = substr ( $source, - 1, 1 );
$num = ord ( $char );
if ($num > 8) {
return $source;
}
$len = strlen ( $source );
for($i = $len - 1; $i >= $len - $num; $i --) {
if (ord ( substr ( $source, $i, 1 ) ) != $num) {
return $source;
}
}
$source = substr ( $source, 0, - $num );
return $source;
}
}
这两部分代码的加密结果不同,无法兼容,请问是什么问题啊?

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储

字符串是由字符组成的序列,包括字母、数字和符号。本教程将学习如何使用不同的方法在PHP中计算给定字符串中元音的数量。英语中的元音是a、e、i、o、u,它们可以是大写或小写。 什么是元音? 元音是代表特定语音的字母字符。英语中共有五个元音,包括大写和小写: a, e, i, o, u 示例 1 输入:字符串 = "Tutorialspoint" 输出:6 解释 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。总共有 6 个元

Gate.io是一款受欢迎的加密货币交易所,用户可通过下载其安装包并安装在设备上使用。获取安装包步骤如下:访问Gate.io官方网站,点击“下载”,选择对应操作系统(Windows、Mac或Linux),将安装包下载至计算机。安装过程中建议暂时禁用杀毒软件或防火墙,确保安装顺利。完成后,用户需创建Gate.io账户以开始使用。

如果您是一位经验丰富的 PHP 开发人员,您可能会感觉您已经在那里并且已经完成了。您已经开发了大量的应用程序,调试了数百万行代码,并调整了一堆脚本来实现操作

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。
