Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.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
C# PHP SHA1与PasswordDeriveBytes SHA1-不同的长度_C#_Php_Cryptography_Sha1 - Fatal编程技术网

C# PHP SHA1与PasswordDeriveBytes SHA1-不同的长度

C# PHP SHA1与PasswordDeriveBytes SHA1-不同的长度,c#,php,cryptography,sha1,C#,Php,Cryptography,Sha1,在这些帖子上读过这个问题(仅举两个例子) …我想知道是否有人知道Microsoft用来扩展其输出的方法 为了与其他人用C#编写的系统集成,我需要用PHP生成一个大的散列。生成SHA1哈希的代码生成32字节的输出,而不是标准的20字节SHA1输出。那么,有人破解了微软如何填充剩下的12个字节吗?我已经尝试了很多附加salt、密码等的组合,以及在以前的迭代中附加,但似乎并没有任何东西能产生微软的输出 我对关于……的评论有点担心 “PasswordDeriveBytes使用未知的、专有的、不确定的

在这些帖子上读过这个问题(仅举两个例子)

…我想知道是否有人知道Microsoft用来扩展其输出的方法

为了与其他人用C#编写的系统集成,我需要用PHP生成一个大的散列。生成SHA1哈希的代码生成32字节的输出,而不是标准的20字节SHA1输出。那么,有人破解了微软如何填充剩下的12个字节吗?我已经尝试了很多附加salt、密码等的组合,以及在以前的迭代中附加,但似乎并没有任何东西能产生微软的输出

我对关于……的评论有点担心

“PasswordDeriveBytes使用未知的、专有的、不确定的、已断开的, PasswordDeriveBytes密钥拉伸的加密不安全方法”

示例代码如下

我需要在PHP中复制C#代码,以便生成与第三方软件集成的正确哈希:

string sPassword = "iudF98yfh9aRfhanifakdfn0a4ut-a8J789jasdpasd=";
string sSalt = "lYU7m+MDCvVWVQyuLIX3og==";
int iLength = 256 / 8;
byte[] saltInBytes = Encoding.ASCII.GetBytes(sSalt);

PasswordDeriveBytes password = new PasswordDeriveBytes(sPassword, saltInBytes, "SHA1", 2);

byte[] keyBytes = password.GetBytes(iLength);

Console.WriteLine("\nkeyBytes = \n");

foreach (byte value in keyBytes)
{
    Console.WriteLine(value);
}
…输出

0
176
172
127
35
113
212
85
123
19
71
65
23
127
84
165
163
225
80
207
67
125
128
205
188
248
103
52
23
245
111
20
Array
(
    [1] => 0
    [2] => 176
    [3] => 172
    [4] => 127
    [5] => 35
    [6] => 113
    [7] => 212
    [8] => 85
    [9] => 123
    [10] => 19
    [11] => 71
    [12] => 65
    [13] => 23
    [14] => 127
    [15] => 84
    [16] => 165
    [17] => 163
    [18] => 225
    [19] => 80
    [20] => 207
)
我的PHP代码相同的功能是

$sPassword = "iudF98yfh9aRfhanifakdfn0a4ut-a8J789jasdpasd=";
$sSalt = "lYU7m+MDCvVWVQyuLIX3og==";
$iIterations = 2;
$iLength = 256 / 8;

// combine password with salt
$key = $sPassword.$sSalt;

// perform sha1 how ever many times, using raw binary output instead of hex
for($i = 1; $i <= $iIterations; $i++) { 
    $key = sha1($key, true); 
}

// get the iLength number of chars
$key = substr($key, 0, $iLength);

$aKeyBytes = unpack('C*', $key);

print_r($aKeyBytes); 
…但正如你所看到的,我们只短了12个字节


不幸的是,它必须被复制-我不能修改C以使用更好的方法-我无法控制这一方面-我的PHP代码必须生成它

我需要或多或少相同的东西-在
PHP
中使用
AES256-CBC
加密的数据,我需要能够使用
VB
代码进行解密

我花了一段时间搜索互联网并测试各种代码示例,但我能够使用以下帖子中的信息使其正常工作:

  • C#/VB代码
亲切问候,


Sven

我需要或多或少相同的东西-在
PHP
中使用
AES256-CBC
加密的数据,我需要能够使用
VB
代码进行解密

我花了一段时间搜索互联网并测试各种代码示例,但我能够使用以下帖子中的信息使其正常工作:

  • C#/VB代码
亲切问候,


Sven

来自
PasswordDeriveBytes
的前20个字节如PBKDF1规范所述。其余部分是特定于Microsoft的扩展。我不知道有任何关于扩展的公共文档/规范。因此,您所能做的就是对
PasswordDeriveBytes
进行反向工程,或者查找其他人创建的writeup。但这可能会产生一些不希望的法律影响。谢谢你的回复-这是一个遗憾:文件-我找不到任何一个或一份书面文件-希望有人,某处会找到它并回复:S@NickAllan解决此问题的最佳方法是在c#中创建一个命令行应用程序,并从PHP
exec获得结果()
functionTags应该是比较常见的,否则你就不会提醒任何“关注者”关于新问题的标签。在crypto.stackexchange.com上,我可以只关注整个提要,但显然这是不可能的。只关注“加密”很好。
PasswordDeriveBytes
中的前20个字节如PBKDF1规范所述。其余的是特定于Microsoft的扩展。我不知道任何用于扩展的公共文档/规范。因此,您所能做的就是对
PasswordDeriveBytes
进行反向工程或查找其他人创建的写入。但这可能有some不希望的法律影响。感谢您的回复-这是一个遗憾:文件-我找不到任何一个或书面-希望有人,某处会找到它并回复:S@NickAllan解决此问题的最佳方法是在c#中创建一个命令行应用程序,并从PHP
exec()获得结果
functionTags应该是比较常见的,否则你不会提醒任何“关注者”关于新问题的标签。在crypto.stackexchange.com上,我可以只关注整个提要,但显然这是不可能的。只要“加密”就可以了。