首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP SHA1 vs PasswordDeriveBytes SHA1 -长度不同

PHP SHA1 vs PasswordDeriveBytes SHA1 -长度不同
EN

Stack Overflow用户
提问于 2014-12-10 16:01:38
回答 1查看 1.2K关注 0票数 2

在这些帖子上阅读了关于这个问题的文章(仅举两个例子).

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

C# PasswordDeriveBytes混淆

...I想知道是否有人知道微软用什么方法来扩展他们的输出?

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

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

"PasswordDeriveBytes使用了一种未知的、专有的、不确定的、破碎的、密码上不安全的PasswordDeriveBytes密钥拉伸方法“

示例代码如下..。

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

代码语言:javascript
复制
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);
}

...which输出..。

代码语言:javascript
复制
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代码是..。

代码语言:javascript
复制
$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); 

...and这个输出..。

代码语言:javascript
复制
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
)

正如你所看到的,...but我们少了12个“字节”。

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

EN

回答 1

Stack Overflow用户

发布于 2016-03-02 11:02:47

我需要差不多相同的东西--使用AES256-CBCPHP中加密的数据,我需要能够使用VB代码解密的数据。

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

致以亲切的问候,

斯文

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27405481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档