Tôi đã đoạn mã sau C# mà tạo ra các phím:Sự khác nhau giữa mã hóa .NET và PHP
public static byte[] Encrypt(byte[] plainData, string salt)
{
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = ASCIIEncoding.ASCII.GetBytes(salt);
DES.IV = ASCIIEncoding.ASCII.GetBytes(salt);
ICryptoTransform desencrypt = DES.CreateEncryptor();
byte[] encryptedData = desencrypt.TransformFinalBlock(plainData, 0, plainData.Length);
return encryptedData;
}
private string GetEncryptedKey(string key)
{
return BitConverter.ToString(KeyGeneratorForm.Encrypt(ASCIIEncoding.ASCII.GetBytes(key), "abcdefgh")).Replace("-", "");
}
Tôi đang cố gắng để thực hiện điều tương tự trong PHP:
function get_encrypted_key($key){
$salt = "abcdefgh";
return bin2hex(mcrypt_encrypt(MCRYPT_DES, $salt, $key, MCRYPT_MODE_CBC, $salt));
}
Tuy nhiên, có sự khác biệt nhỏ trong kết quả, vì 16 ký tự cuối cùng luôn khác nhau:
With key "Benjamin Franklin":
C# : 0B3C6E5DF5D747FB3C50DE952FECE3999768F35B890BC391
PHP: 0B3C6E5DF5D747FB3C50DE952FECE3993A881F9AF348C64D
With key "President Franklin D Roosevelt":
C# : C119B50A5A7F8C905A86A43F5694B4D7DD1E8D0577F1CEB32A86FABCEA5711E1
PHP: C119B50A5A7F8C905A86A43F5694B4D7DD1E8D0577F1CEB37ACBE60BB1D21F3F
Tôi cũng đã cố gắng thực hiện phần đệm chuyển sang khóa của tôi bằng cách sử dụng mã sau:
function get_encrypted_key($key){
$salt = "abcdefgh";
$extra = 8 - (strlen($key) % 8);
if($extra > 0) {
for($i = 0; $i < $extra; $i++) {
$key.= "\0";
}
}
return bin2hex(mcrypt_encrypt(MCRYPT_DES, $salt, $key, MCRYPT_MODE_CBC, $salt));
}
Nhưng tôi sẽ có kết quả tương tự như không có đệm.
Nếu bạn có bất kỳ đầu mối nào về những gì đang xảy ra, tôi rất vui khi được nghe về điều đó! :)
Cảm ơn
Có lẽ một kết quả của chương trình đệm khác nhau? – mensi
Nếu bằng đoạn mã đệm "cổ điển", bạn có nghĩa là đoạn được đề cập ngay ở đầu ghi chú trên 'mcrypt_encrypt', cung cấp cho tôi kết quả' C# 'của bạn từ PHP. Lưu ý rằng đoạn mã sử dụng ECB chứ không phải CBC, vì vậy bạn cần phải chỉnh sửa đoạn mã đó. –
Cảm ơn các bạn đã bình luận. Tôi đã viết chi tiết mã mà tôi đã sử dụng để đệm. Tôi sẽ nhìn vào liên kết của John. – karlipoppins