c# - PHP 和 C# 中的 DES 加密

标签 c# php encryption

我正在尝试实现与在 C# 代码中但在 PHP 中相同的 DES 加密。

C# 代码如下所示:

public static string EncriptarCadena(string strEncriptar)
{
    DESCryptoServiceProvider provider;

    MemoryStream stream;
    CryptoStream stream2;
    string str2;
    string str = "29393651";
    byte[] buffer2 = new byte[] { 0x45, 50, 0xa5, 0x18, 0x67, 0x58, 0xac, 0xba };
    byte[] bytes = new byte[0];
    try
    {
        bytes = Encoding.UTF8.GetBytes(str.Substring(0, 8));
        provider = new DESCryptoServiceProvider();
        byte[] buffer = Encoding.UTF8.GetBytes(strEncriptar);
        stream = new MemoryStream();
        stream2 = new CryptoStream(stream, provider.CreateEncryptor(bytes, buffer2), CryptoStreamMode.Write);
        stream2.Write(buffer, 0, buffer.Length);
        stream2.FlushFinalBlock();
        str2 = Convert.ToBase64String(stream.ToArray());
    }
    catch (Exception)
    {
        str2 = "";
    }
    finally
    {
        provider = null;
        stream = null;
        stream2 = null;
    }
    return str2;
}

到目前为止,我在 PHP 中完成的代码如下:

function encrypt($string) {
    //Key
    $key = "29393651";
    $ivArray=array( 0x45, 50, 0xa5, 0x18, 0x67, 0x58, 0xac, 0xba );
    $iv=null;
    foreach ($ivArray as $element)
        $iv.=CHR($element);

    echo "Key: $key    IV: $iv<br>";

    $encrypted_string = mcrypt_encrypt(MCRYPT_DES, $key, $string, MCRYPT_MODE_CBC, $iv);

    return base64_encode($encrypted_string);
}

但我找不到问题出在哪里,因为他们不会为相同的输入给出相同的结果。

非常欢迎任何帮助:)

最佳答案

检查您的 padding .默认情况下,PHP 在内部使用二进制 NULL \x00 填充要加密的数据,这绝对不是 .NET 中的默认填充模式(它们很可能默认使用 PKCS7 填充)。

关于c# - PHP 和 C# 中的 DES 加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4251289/

相关文章:

c# - 如果不存在则插入否则显示消息 "Already exists"

c# - OneSignal Chrome 多重通知

c# - 向 ASP 控件添加自定义事件

php - MYSQLI 错误 - 搜索语法帮助 - JOIN

php - MySQL 对除一行之外的所有行进行排序

java - 解密网页cookie

c# - 使用 YIELD 是返回集合的只读方式吗?

PHP 没有将一些值插入 MySQL 数据库

java - 如何使用 eToken 在客户端加密数据

encryption - 解密需要 M 个 key 中的 N 个的加密方法