Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Silverlight中实现PasswordDeriveBytes_Silverlight_Encryption_Sha1 - Fatal编程技术网

在Silverlight中实现PasswordDeriveBytes

在Silverlight中实现PasswordDeriveBytes,silverlight,encryption,sha1,Silverlight,Encryption,Sha1,我正在尝试读取Silverlight中的一些加密数据,这些数据是使用传统的.NET应用程序加密的,该应用程序使用PasswordDeriveBytes生成密钥。我知道现在我们应该使用Rfc2898DeriveBytes,但是现有的应用程序部署在2000多个位置,并且在所有这些位置更改数据加密以实现Silverlight版本的UI在此时是不可行的 我曾尝试实现自己版本的PasswordDeriveBytes.GetBytes(int byteCount),但尽管我可以轻松获得前20个字节(使用SH

我正在尝试读取Silverlight中的一些加密数据,这些数据是使用传统的.NET应用程序加密的,该应用程序使用
PasswordDeriveBytes
生成密钥。我知道现在我们应该使用
Rfc2898DeriveBytes
,但是现有的应用程序部署在2000多个位置,并且在所有这些位置更改数据加密以实现Silverlight版本的UI在此时是不可行的

我曾尝试实现自己版本的
PasswordDeriveBytes.GetBytes(int byteCount)
,但尽管我可以轻松获得前20个字节(使用SHA1哈希),但我无法计算出下一组字节是如何计算的(我需要生成一个32字节的密码)。据我所知,微软正在使用PBKDF1的“扩展名”来计算密钥,但我还没有找到关于该扩展名可能是什么的任何信息

我曾尝试移植Mono项目实现的
PasswordDeriveBytes
代码,以及我在Web上其他几个地方找到的代码,但它们返回的密码与原始.NET类完全不同(即使是前20个字节)

这是一个版本的
GetBytes()
,返回正确的前20个字节,但我不知道如何计算下一个字节块(或任何后续块)。这是简化的代码,没有错误处理,但我认为它清楚地显示了我如何生成第一个bye块

public byte[] GetBytes(int byteCount)
{
    byte[] result = new byte[byteCount];

    byte[] pwd = Encoding.UTF8.GetBytes(_PassPhrase);
    byte[] salt = Encoding.UTF8.GetBytes(_Salt);

    byte[] pwdAndSalt = new byte[pwd.Length + salt.Length];
    pwd.CopyTo(pwdAndSalt, 0);
    salt.CopyTo(pwdAndSalt, pwd.Length);

    byte[] hash = _Sha1.ComputeHash(pwdAndSalt);
    for (int i = 1; i < _Iterations; i++)
    {
        hash = _Sha1.ComputeHash(hash);
    }

    hash.CopyTo(result, 0);

    return result;
}
public byte[]GetBytes(int字节计数)
{
字节[]结果=新字节[字节计数];
byte[]pwd=Encoding.UTF8.GetBytes(\u密码短语);
byte[]salt=Encoding.UTF8.GetBytes(_salt);
字节[]pwdAndSalt=新字节[pwd.Length+salt.Length];
pwd.CopyTo(pwdAndSalt,0);
盐。复制到(pwdAndSalt,pwd。长度);
字节[]散列=_Sha1.ComputeHash(pwdAndSalt);
对于(int i=1;i<\u迭代;i++)
{
哈希=_Sha1.ComputeHash(哈希);
}
hash.CopyTo(结果为0);
返回结果;
}
有人知道如何在Silverlight中正确地实现
PasswordDeriveBytes
以生成与常规.NET版本相同的密钥吗?我将非常感激

谢谢