【发布时间】:2016-10-08 20:07:51
【问题描述】:
我必须重新创建从 c# 到 php 的东西。 我真的不知道该怎么做,因为我从来没有真正需要处理过加密之类的事情。
在 c# 中我得到了这个:
public static byte[] decrypt(byte[] data, byte[] key)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
des.Key = key;
des.Mode = CipherMode.ECB;
des.Padding = PaddingMode.None;
return des.CreateDecryptor().TransformFinalBlock(data, 0, data.Length);
}
public static byte[] encrypt(byte[] data, byte[] key)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
des.Key = key;
des.Mode = CipherMode.ECB;
des.Padding = PaddingMode.None;
return des.CreateEncryptor().TransformFinalBlock(data, 0, data.Length);
}
public static byte[] get8byte(string input)
{
byte[] ByteArray = new byte[8];
string tmp = string.Empty;
int j = 0;
for (int i = 0; i < 16; i++)
{
tmp = "" + input[i];
tmp = tmp + input[i + 1];
ByteArray[j] = byte.Parse(tmp, System.Globalization.NumberStyles.HexNumber);
j++;
i++;
}
return ByteArray;
}
我必须使用的密钥被加密如下:
var Buffer = new char[16];
var cMasterKey = new byte[8];
byte[] Key = {
(byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5',
(byte) '6', (byte) '7', (byte) '8'
};
cMasterKey = DESUtils.get8byte(new string(Buffer));
MasterKey = DESUtils.decrypt(cMasterKey, Key);
“缓冲区”来自一个 USB 驱动器,该驱动器上有一个文件,其中包含 16 个字符的主密钥。 我真的不知道如何在 PHP 中实现它。我尝试了很多东西,比如 pack('C*', $var) 和类似的东西,但我没有得到相同的结果。 这里有人知道如何处理吗?我不知道我是否走对了,但我尝试过这样的事情:
$key = pack('C*', 1, 2, 3, 4, 5, 6, 7, 8);
$masterbyte = pack('C*', $buffer);
$decmasterkey = mcrypt_decrypt(MCRYPT_DES, $key, $masterbyte, MCRYPT_MODE_ECB);
【问题讨论】:
-
考虑接受有帮助的答案。要接受答案,请单击最佳答案旁边的空心复选标记,这样做会提高您的声誉并提供更多功能,请参阅reputation faq 更多详细信息,请参阅this page。
标签: c# php encryption mcrypt des