C#에서 모든 것을 다시 만들어야합니다. 나는 진짜로 암호화 또는 무언가 같이 것을 결코 취급해야하지 않은 사촌을하기 위하여 무엇을 알지 않는다. C#에서DES C#에서 PHP 로의 암호화가 예상대로 작동하지 않습니다.
나는이있어 :
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;
}
와 내가 사용해야하는 키와 같은 암호화 된 사항은 다음과 같습니다 "버퍼"파일이있는 USB 드라이브에서 오는
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);
을 그것에는 16 자의 Masterkey가 포함되어 있습니다. 저는 PHP로 그것을 어떻게 실현하는지 정말로 모르겠습니다. 나는 pack ('C *', $ var)과 같은 것들을 많이 시도했지만 같은 결과를 얻지는 못했습니다. 처리 방법을 알고있는 사람이 있습니까? 내가 올바른 방법에있어 나도 잘 모릅니다하지만이 같은 것들을 시도 : C#에서
$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] (http://stackoverflow.com/faq#reputation) 참고 [ 이 페이지] (http://meta.stackoverflow.com/questions/5234/how-does-accepting-an-answer-work)를 참조하십시오. – zaph