C# Rfc2898DeriveBytes 到 PHP

Posted

技术标签:

【中文标题】C# Rfc2898DeriveBytes 到 PHP【英文标题】:C# Rfc2898DeriveBytes to PHP 【发布时间】:2015-11-09 06:59:59 【问题描述】:

我正在尝试将以下函数从 C# 改编为 php,但我无法让它工作。我已经搜索了其他线程,但找不到正确的答案来解决我的问题。

public static string Decrypt(string EncryptedText)

    byte[] bytes = Encoding.ASCII.GetBytes("hello");
    byte[] buffer = Convert.FromBase64String(EncryptedText);
    byte[] rgbKey = new Rfc2898DeriveBytes("world", bytes).GetBytes(0x20);

    ICryptoTransform transform = new RijndaelManaged  Mode = CipherMode.CBC .CreateDecryptor(rgbKey, bytes);
    MemoryStream stream = new MemoryStream(buffer);
    CryptoStream stream2 = new CryptoStream(stream, transform, CryptoStreamMode.Read);
    byte[] buffer4 = new byte[buffer.Length];

    int count = stream2.Read(buffer4, 0, buffer4.Length);
    stream.Close();
    stream2.Close();

    return Encoding.UTF8.GetString(buffer4, 0, count);

任何帮助表示赞赏。谢谢!

【问题讨论】:

也发布您的 PHP 代码 【参考方案1】:

到目前为止我的 PHP 代码:

<?php
$key = hash_pbkdf2('sha1', 'world', 'hello', 1000, 32);
$decrypted = mcrypt_decrypt(
            MCRYPT_RIJNDAEL_128,
            $key,
            'very long encrypted string',
            MCRYPT_MODE_CBC,
            'world');
?>

【讨论】:

以上是关于C# Rfc2898DeriveBytes 到 PHP的主要内容,如果未能解决你的问题,请参考以下文章

Crypto++ pbkdf2 输出不同于 Rfc2898DeriveBytes (C#) 和 crypto.pbkdf2 (JavaScript)

.NET:PasswordDeriveBytes 和 Rfc2898DeriveBytes 之间的区别

PasswordDeriveBytes 与 Rfc2898DeriveBytes,已过时但速度更快

Rfc2898DeriveBytes + PBKDF2 + SecureString 是不是可以使用安全字符串而不是字符串?

C# 版本的 OpenSSL EVP_BytesToKey 方法?

PBKDF2 Python 密钥与 .NET Rfc2898