PHP和.NET关于3DES加密兼容问题
Jun 06, 2016 pm 07:45 PM下面是我的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;
}
}
这两部分代码的加密结果不同,无法兼容,请问是什么问题啊?

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP

Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP?
