繁体   English   中英

PHP SHA1 vs PasswordDeriveBytes SHA1-不同的长度

[英]PHP SHA1 vs PasswordDeriveBytes SHA1 - differing lengths

阅读了这些帖子上的这个问题(仅举两个)...

在vb.net中加密/解密并不总是返回相同的值

C#PasswordDeriveBytes混淆

...我想知道是否有人知道微软用来扩展输出的方法?

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

我对https://stackoverflow.com/a/13482133/4346051上的此评论有点担心...

“ 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

我具有相同功能的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); 

...然后输出...

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
)

...但是正如您所看到的,我们短了12个“字节”。

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

我差不多需要一件事-用PHP中的AES256-CBC加密的数据,我需要能够使用VB代码解密。

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

亲切的问候,

斯文

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM