草庐IT

下载的文件打不开甚至中毒?教你几招Hash文件

Aimo 2023-03-28 原文

很多朋友都有过下载了某个文件打不开,或者打开后根本不是那么回事的情况,有的朋友甚至下载某“官方系统”安装后却一堆病毒,这往往是由于下载的文件货不对板造成的。由于网络问题、CDN缓存乃至钓鱼网站等原因,默认情况下真的很难判断下载回来的文件会不会货不对板。要解决这个问题,对文件进行Hash哈希校验,是非常有效的做法,但Windows默认似乎没有这功能选项。怎么办?今天就来分享几招!

命令行

其实说Windows默认没有Hash文件的功能,是不准确的,Windows系统其实带有Hash文件功能,只不过并不直接在图形界面提供给用户,通过命令行就可以执行Hash命令。

首先,我们需要查询某个文件的具体路径,这个很简单,通过点击文件呼出右键菜单查看属性即可查询到。

接着,运行PowerShell,输入以下命令。

Get-FileHash <文件路径> -Algorithm <Hash算法>| Format-List.

其中,<文件路径>填写文件所在的位置,而<Hash算法>则填写想要运算的Hash类型。Windows默认支持SHA1、SHA256、SHA384、SHA512、MACTripleDES、MD5、RIPEMD160算法,不支持CRC-32、CRC-64。

例如,有个文件叫“1.jpg”,存在于C盘的根目录,想要用MD5算法来校验,那么就应该输入以下命令。

Get-FileHash C:\1.jpg -Algorithm md5| Format-List.

之后,PowerShell中就会给出Hash值了。

7-Zip

命令行虽然有用,但毕竟麻烦,有没有什么更简便的方法?其实可以尝试使用7-Zip这款压缩软件。

7-Zip:https://www.7-zip.org/。

7-Zip的大名相信很多人都听说过,这是目前世界上最流行的开源压缩软件之一,影响力巨大,很多压缩软件尤其是国产压缩软件,都使用了7-Zip的源代码。但鲜为人知的是,其实7-Zip除了能帮你压缩、解压文件,也提供了非常方便快捷的Hash文件功能。

打开7-Zip的主界面,点击“工具”进入“选项”,即可看到多个选项卡。切换到“7-Zip”,勾选“添加7-Zip到右键菜单”,并勾选下面“CRC SHA”的选项,之后用右键点击文件,就可以看到7-Zip提供的Hash功能了。

7-Zip支持CRC-32、CRC-64、SHA256、SHA1以及BLAKE2sp等Hash算法,很好地弥补了Windows自带Hash算法的不足。可惜的是7-Zip没有提供非常常见的MD5,如果需要MD5的Hash,还得另寻他法。

OpenHashTab

7-Zip虽好,但它本职始终是一个压缩软件。如果你需要更专业的解决方案,OpenHashTab或许是更完美的选择。

OpenHashTab:https://github.com/namazso/OpenHashTab。

OpenHashTab是一款开源的、专注于提供Hash校验功能的小软件。它的体积小巧,支持中文,不存在什么使用门槛。

OpenHashTab的使用很简单,下载后直接安装即可。之后,只要打开文件属性,就可以看到“哈希信息”的标签,里面罗列着文件的各种哈希值。

OpenHashTab的功能是专业且全面的。在支持的算法方面,OpenHashTab支持以下Hash算法。

CRC32, CRC64 (xz)

xxHash (XXH32, XXH64)

xxHash3 (64 and 128 bit variants)

MD4, MD5

RipeMD160

Blake2sp

SHA-1

SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512)

SHA-3 (SHA3-224, SHA3-256, SHA3-384, SHA3-512)

BLAKE3 (256 bit, 512 bit)

KangarooTwelve (264 bit, 256 bit, 512 bit)

ParallelHash128 (264 bit) and ParallelHash256 (528 bit)

Streebog (GOST R 34.11-12) (256 bit, 512 bit)

另外,OpenHashTab还支持文件夹,也可以选择多个文件一同计算Hash,双击计算出来的Hash值即可选择复制,还是非常方便的。

总的来说,如果你经常有计算文件Hash的需求,OpenHashTab会是非常好的选择。

总结

担心下载的文件出差错,利用Hash对比的确是行之有效的方法。目前Windows默认的Hash功能并不算方便,希望上文的方法能够帮到大家!

有关下载的文件打不开甚至中毒?教你几招Hash文件的更多相关文章

  1. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  2. ruby - 其他文件中的 Rake 任务 - 2

    我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时

  3. ruby-on-rails - 在 Rails 中将文件大小字符串转换为等效千字节 - 2

    我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,

  4. ruby-on-rails - Rails 3 中的多个路由文件 - 2

    Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题

  5. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  6. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  7. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  8. ruby-on-rails - Rails 源代码 : initialize hash in a weird way? - 2

    在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has

  9. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  10. ruby - Ruby 的 Hash 在比较键时使用哪种相等性测试? - 2

    我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。

随机推荐