吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1004|回复: 7
上一主题 下一主题
收起左侧

[已解决] sha1的输出结果不一样?怎么回事?【已解决】

[复制链接]
跳转到指定楼层
楼主
jyjjf 发表于 2023-5-12 16:30 回帖奖励
本帖最后由 jyjjf 于 2023-5-13 10:41 编辑

最近再调试一个关于加解密的VB.Net 字符串加密类https://www.cnblogs.com/yhsc/p/4393670.html),
发现里面有个sha1的hash问题(问题代码如下),
代码我的理解是对输入的字符串进行sha1加密并补位或截取,
但是好像并不是sha1加密,
譬如我TruncateHash("1",24) ,
按道理应该是sha1的结果是356A192B7913B04C54574D18C28D46E6395428AB00000000,
但是结果是                          E91FE173F59B063D620A934CE1A010F2B114C1F300000000,
明显不一样。
可是使用空白结果倒是一样的,TruncateHash("",24)
都是DA39A3EE5E6B4B0D3255BFEF95601890AFD8070900000000
说明后面的00000000是补位。
问一下大神,这个sha1是怎么回事?


    Private Function TruncateHash(ByVal key As String, ByVal length As Integer) As Byte()     
        Dim sha1 As New System.Security.Cryptography.SHA1CryptoServiceProvider  ' Hash the key.  
        Dim keyBytes() As Byte = System.Text.Encoding.Unicode.GetBytes(key)
        Dim hash() As Byte = sha1.ComputeHash(keyBytes)  ' Truncate or pad the hash.
        ReDim Preserve hash(length - 1)
        Return hash
    End Function

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
kwk99 发表于 2023-5-12 18:13

回帖奖励 +2 CB吾爱币

使用python sha1 加密出来的结果与楼主的预想是一致的

import hashlib
str = '1'
estr = str.encode('utf-8')
s1 = hashlib.sha1(estr).hexdigest().upper()

print(f'sha1加密后的结果为:{s1}')
print(f'进行补位后为:{s1}00000000')

结果如下

1a46f7c7d57a4b5fb275d0ced5f1d48c.png (46.38 KB, 下载次数: 0)

1a46f7c7d57a4b5fb275d0ced5f1d48c.png

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
jyjjf + 1 + 1 热心回复!

查看全部评分

3#
 楼主| jyjjf 发表于 2023-5-12 18:34 |楼主
kwk99 发表于 2023-5-12 18:13
使用python sha1 加密出来的结果与楼主的预想是一致的

import hashlib

所以,很奇怪为什么结果会是另外一个E91FE173F59B063D620A934CE1A010F2B114C1F300000000,而不是356A192B7913B04C54574D18C28D46E6395428AB00000000
4#
hrpzcf 发表于 2023-5-12 19:01
换个编码器,可能是编码器的问题
比如System.Text.Encoding.UTF8.GetBytes

免费评分

参与人数 1热心值 +1 收起 理由
jyjjf + 1 谢谢@Thanks!

查看全部评分

5#
流云 发表于 2023-5-12 20:33
他这个sha1是标准的 但是运算前他给数据尾巴+上了0x00  比如这个E91FE173F59B063D620A934CE1A010F2B114C1F300000000 就是对0x3100运算的结果

猜测 可能是宽字符的原因吧

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
jyjjf + 1 + 1 热心回复!

查看全部评分

6#
 楼主| jyjjf 发表于 2023-5-13 10:38 |楼主
hrpzcf 发表于 2023-5-12 19:01
换个编码器,可能是编码器的问题
比如System.Text.Encoding.UTF8.GetBytes

感谢提示,知道怎么回事了,改成System.Text.Encoding.ASCII.GetBytes这个就结果一样了,很奇怪
7#
 楼主| jyjjf 发表于 2023-5-13 12:53 |楼主
知道细节了,平时转换都是ancii字符串转换,如果都转换十六进制,再转换sha1,结果不一样(十六进制不一样)
如1的字符转换,十六进制是31,sha1结果是356A192B7913B04C54574D18C28D46E6395428AB
如1的UNICODE十六进制是3100,sha1结果就是E91FE173F59B063D620A934CE1A010F2B114C1F3,
8#
pjy612 发表于 2023-5-31 12:14
换 System.Text.Encoding.UTF8 估计就好了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 21:39

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表