在PHP中使用C#解密编码为3DES的字符串 [英] Decrypting in PHP a string encoded 3DES with C#
本文介绍了在PHP中使用C#解密编码为3DES的字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我必须用PHP解密使用此C#类编码的字符串(它是此处)
I have to decrypt in PHP a string encoded with this C# class (it's here)
using System;
using System.Security.Cryptography;
using System.Text;
public static class Encryption
{
public static string Encrypt(string input, string key)
{
byte[] inputArray = UTF8Encoding.UTF8.GetBytes(input);
TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider();
tripleDES.Key = UTF8Encoding.UTF8.GetBytes(key);
tripleDES.Mode = CipherMode.ECB;
tripleDES.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tripleDES.CreateEncryptor();
byte[] resultArray = cTransform.TransformFinalBlock(inputArray, 0, inputArray.Length);
tripleDES.Clear();
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
public static string Decrypt(string input, string key)
{
byte[] inputArray = Convert.FromBase64String(input);
TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider();
tripleDES.Key = UTF8Encoding.UTF8.GetBytes(key);
tripleDES.Mode = CipherMode.ECB;
tripleDES.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tripleDES.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(inputArray, 0, inputArray.Length);
tripleDES.Clear();
return UTF8Encoding.UTF8.GetString(resultArray);
}
}
我尝试了在网络上找到的其他示例,但没有似乎有效。我认为第一个问题与php mcrypt_generic_init中的$ iv参数有关,然后另一个问题与php函数中缺少的填充有关。
您能帮我在PHP中转换上面的c#Decrypt函数吗?
谢谢。
I've tried different examples found around on the web, but nothing seems to work. I think that the first problems comes with the $iv parameter in php mcrypt_generic_init and then another problem comes with padding that is missing in php functions. Can you please help me to convert the c# Decrypt function above in PHP? Thank you.
推荐答案
即使我今天也尝试使用PHP和C#代码
Even I tried today code for both PHP and C#
<?php
$key64 = "YOUR_KEY";
$iv64 = "YOUR_IV";
$keybytes = base64_decode($key64);
$ivbytes = base64_decode($iv64);
$text = ("4111111111111111");
// Padding the text
$padding = strlen($text)%8;
for($i=$padding; $i<8; $i++){
$text .= chr(8-$padding);
}
$decryptRaw = mcrypt_encrypt(MCRYPT_3DES, $keybytes, $text, MCRYPT_MODE_CBC, $ivbytes);
$encoded = base64_encode($decryptRaw);
print "$encoded<br/>";
$encryptedString64 = $encoded;
$decryptbytes = base64_decode($encryptedString64);
$decryptRaw = mcrypt_decrypt(MCRYPT_3DES, $keybytes, $decryptbytes, MCRYPT_MODE_CBC, $ivbytes);
$decryptString=trim($decryptRaw,"\x00..\x1F");
print "$decryptString<br/>";
?>
C#
private string Decrypt(string encryptedValue)
{
SymmetricAlgorithm tripleDESKey = SymmetricAlgorithm.Create("TripleDES") ;
tripleDESKey.Key = Convert.FromBase64String("YOUR_KEY");
tripleDESKey.IV = Convert.FromBase64String("YOUR_IV") ;
MemoryStream encryptedStream = new MemoryStream();
encryptedStream.Write(Convert.FromBase64String(encryptedValue), 0,
Convert.FromBase64String(encryptedValue).Length);
encryptedStream.Position = 0;
CryptoStream cs = new CryptoStream(encryptedStream,
tripleDESKey.CreateDecryptor(), CryptoStreamMode.Read);
MemoryStream decryptedStream = new MemoryStream();
byte[] buf = new byte[2049];
int bytesRead = 0;
bytesRead = cs.Read(buf, 0, buf.Length);
while ((bytesRead > 0))
{
decryptedStream.Write(buf, 0, bytesRead);
bytesRead = cs.Read(buf, 0, buf.Length);
}
return Encoding.ASCII.GetString(decryptedStream.ToArray());
}
private string Encrypt(string encrypt)
{
SymmetricAlgorithm sa = SymmetricAlgorithm.Create("TripleDES") ;
sa.Key = Convert.FromBase64String("YOUR_KEY");
sa.IV = Convert.FromBase64String("YOUR_IV") ;
byte[] inputByteArray = Encoding.ASCII.GetBytes(encrypt);
MemoryStream mS = new MemoryStream();
ICryptoTransform trans = sa.CreateEncryptor();
byte[] buf = new byte[2049];
CryptoStream cs = new CryptoStream(mS, trans, CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
return Convert.ToBase64String(mS.ToArray());
}
这篇关于在PHP中使用C#解密编码为3DES的字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文