我不得不重新創建從c#到php的東西。 我真的不知道該做什麼因爲我從來沒有真正處理過像加密之類的事情。從C#到PHP的DES加密不按預期方式工作
在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);
考慮接受有用的答案。 要接受答案,請點擊最佳答案旁邊的空白複選標記,這樣做會增加您的聲望並提供更多功能,請參閱[聲譽常見問題](http://stackoverflow.com/faq#reputation)請參閱[本頁](http://meta.stackoverflow.com/questions/5234/how-does-accepting-an-answer-work)瞭解更多詳情。 – zaph