MyEasyTools:哈希值计算器(MD5+SHA1)

文件哈希计算完整工具 【代码】文件哈希计算完整工具。 阅读详情

学习下WPF,顺便用WPF把WinForm的程序改成了WPF,功能和MFC版功能基本相同



主要代码:

1 设置DataGrid的Style

        <Style x:Key="Body_Content_DataGrid_Centering" TargetType="{x:Type DataGridCell}">
            <Style.Triggers>
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="Background" Value="ForestGreen"/>
                </Trigger>
            </Style.Triggers>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type DataGridCell}">
                        <Grid Background="{TemplateBinding Background}">
                            <ContentPresenter VerticalAlignment="Center" />
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Setter Property="FontSize" Value="13" />
        </Style>
                    <DataGrid Grid.Row="0" Name="dgHashInfo"                              
                              AutoGenerateColumns="False" 
                              HeadersVisibility="All" RowHeaderWidth="18" RowHeight="25"
                              SelectionMode="Extended" 
                              SelectionUnit="FullRow"
                              CanUserSortColumns="False" 
                              CanUserResizeRows="False"
                              CanUserAddRows="False"
                              AllowDrop="True" 
                              DragEnter="dgHashInfo_DragEnter" 
                              DragOver="dgHashInfo_DragEnter"
                              Drop="dgHashInfo_Drop" 
                              LoadingRow="dgHashInfo_LoadingRow"
                              CellStyle="{StaticResource Body_Content_DataGrid_Centering}"
                              ItemsSource="{Binding}" >
                        <DataGrid.RowStyle>
                            <Style TargetType="DataGridRow">
                                <Style.Triggers>
                                    <Trigger Property="IsMouseOver" Value="True">
                                        <Setter Property="Background" Value="DeepSkyBlue" />
                                        <Setter Property="Foreground" Value="White" />
                                    </Trigger>
                                </Style.Triggers>
                            </Style>
                        </DataGrid.RowStyle>
                        <DataGrid.RowHeaderStyle>
                            <Style TargetType="DataGridRowHeader">                                
                                <Setter Property="FontSize" Value="13"/>
                                <Setter Property="Width" Value="20"/>
                                <Setter Property="Background">
                                    <Setter.Value>
                                        <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
                                            <GradientStop Color="White" Offset="0"/>
                                            <GradientStop Color="SkyBlue" Offset="1"/>
                                        </LinearGradientBrush>
                                    </Setter.Value>
                                </Setter>
                                <Style.Triggers>
                                    <Trigger Property="IsMouseOver" Value="True">
                                        <Setter Property="ToolTip" Value="Select this row"/>
                                    </Trigger>
                                </Style.Triggers>
                            </Style>
                        </DataGrid.RowHeaderStyle>
                        <DataGrid.ContextMenu>
                            <ContextMenu Name="cmRighMenu" StaysOpen="True" >
                                <MenuItem Name="cmAddNewRow" Header="Add new row" Click="cmAddNewRow_Click" />
                            </ContextMenu>                            
                        </DataGrid.ContextMenu>
                        <DataGrid.Columns>
                            <DataGridTextColumn Header="File Attribute" Width="*" Binding="{Binding Attribute, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="True" />
                            <DataGridTextColumn Header="Attribute Value" Width="4*" Binding="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
                        </DataGrid.Columns>
                    </DataGrid>

2 进度条的控制
        private bool InitProgressBar(string filePath)
        {
            bool result = true;
            string key = GenerateNameByHashCode(filePath);

            if (htProgressBar.ContainsKey(key))
            {
                result = false;
                Warnning("Wait for this file calculate completely");
            }
            else
            {
                ProgressBar pb = new ProgressBar();
                pb.IsIndeterminate = false;
                pb.Orientation = Orientation.Horizontal;
                pb.Width = 100;
                pb.Height = sbStatus.ActualHeight - 5;
                pb.Minimum = 0;
                pb.Maximum = 100;
                pb.Value = 0;
                pb.Visibility = Visibility.Visible;
                sbStatus.Items.Add(pb);

                htProgressBar.Add(key, pb);
            }
            return result;
        }
        private void UpdateHashInfo(FileHashInfo fileHashInfo)
        {
            MethodInvokerWithOnePara miProgress = new MethodInvokerWithOnePara(ProgressPerformStep);
            Dispatcher.Invoke(miProgress, new object[] { fileHashInfo });


            if (fileHashInfo.Percent == 100)
            {
                MethodInvokerWithOnePara miHashInfo = new MethodInvokerWithOnePara(AddFileHashInfo);
                Dispatcher.Invoke(miHashInfo, new object[] { fileHashInfo });
            }
        }

        private void ProgressPerformStep(FileHashInfo fileHashInfo)
        {
            string key = GenerateNameByHashCode(fileHashInfo.Path);
            ProgressBar pb = htProgressBar[key] as ProgressBar;

            double value = fileHashInfo.Percent;
            if ((value == -1) || (value >= pb.Maximum))
            {
                ClearProgressBar(key);
            }
            else
            {
                if (value > pb.Value)
                {
                    pb.SetValue(ProgressBar.ValueProperty, value);
                }
            }
        }

        private void ClearProgressBar(string key)
        {
            ProgressBar pb = htProgressBar[key] as ProgressBar;
            if (null != pb)
            {
                sbStatus.Items.Remove(pb);
                htProgressBar.Remove(key);
            }
        }

3 Drag-Drop文件功能实现
        private void rtbSourceText_PreviewDragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                e.Effects = DragDropEffects.Copy;
                e.Handled = true;
            }
            else
            {
                e.Effects = DragDropEffects.None;
            }
        }

        private void rtbSourceText_PreviewDrop(object sender, DragEventArgs e)
        {
            string filePath = ((Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();

            if (!File.Exists(filePath))
            {
                if (Directory.Exists(filePath))
                {
                    Warnning("Does not support directory");
                }
                else
                {
                    Warnning("File not find");
                }
                return;
            }
            else
            {
                FileInfo fi = new FileInfo(filePath);
                if (fi.Extension != ".txt")
                {
                    Warnning("Only support text file");
                    return;
                }
            }

            StreamReader sr = new StreamReader(filePath);
            string content = sr.ReadToEnd();
            rtbSourceText.AppendText(content);
        }
NOTE:结合1 中的绿色背景代码才可以工作

4 计算MD5/SHA1
        public void GetFileHashInfo(string path, CalculateProgressHandle progress)
        {
            fileHashInfo = new FileHashInfo();
            bStopCalc = false;
            fileHashInfo.Path = path;
            fileHashInfo.Size = GetFileSize(path);
            fileHashInfo.LastModifyTime = GetFileTime(path);
            ChangeProgress = progress;

            AsyncGetHashValue(path);
        }

        private void AsyncGetHashValue(string path)
        {
            try
            {
                int bufferSize = 1024 * 1024 * 10; //10M

                buffer = new byte[bufferSize];

                //open file stream
                inputStream = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read);
                hashAlgorithm_MD5 = new MD5CryptoServiceProvider();
                hashAlgorithm_SHA1 = new SHA1CryptoServiceProvider();

                //async read first data into buffer
                inputStream.BeginRead(buffer, 0, buffer.Length, new AsyncCallback(AsyncComputeHashCallback), null);
            }
            catch
            {
                //
            }
        }
        private void AsyncComputeHashCallback(IAsyncResult result)
        {
            int bytesRead = inputStream.EndRead(result);
            if (inputStream.Length == 0)
            {
                fileHashInfo.Percent = 100;
            }
            else
            {
                fileHashInfo.Percent = (int)((double)inputStream.Position / inputStream.Length * 100);
            }

            if (inputStream.Position < inputStream.Length)
            {
                if (bStopCalc)
                {
                    fileHashInfo.Percent = -1;
                    if (null != ChangeProgress)
                    {
                        ChangeProgress(fileHashInfo);
                    }
                    return;
                }
                //caculate hash value
                var output = new byte[buffer.Length];
                hashAlgorithm_MD5.TransformBlock(buffer, 0, buffer.Length, output, 0);
                hashAlgorithm_SHA1.TransformBlock(buffer, 0, buffer.Length, output, 0);

                //async read next data into buffer
                inputStream.BeginRead(buffer, 0, buffer.Length, new AsyncCallback(AsyncComputeHashCallback), null);
            }
            else
            {
                //caculate last block hash value
                hashAlgorithm_MD5.TransformFinalBlock(buffer, 0, bytesRead);
                hashAlgorithm_SHA1.TransformFinalBlock(buffer, 0, bytesRead);

                fileHashInfo.MD5 = BitConverter.ToString(hashAlgorithm_MD5.Hash).Replace("-", "");
                fileHashInfo.SHA1 = BitConverter.ToString(hashAlgorithm_SHA1.Hash).Replace("-", "");
                inputStream.Close();
            }

            if (null != ChangeProgress)
            {
                ChangeProgress(fileHashInfo);
            }
        }

        public static void StopCalculate()
        {
            bStopCalc = true;
        }

单线程同步计算MD5

        private static string GetMD5(string path)
        {
            string sMD5Value = string.Empty;

            Stream file = GetStream(path);
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            byte[] bMD5 = md5.ComputeHash(file);
            sMD5Value = System.BitConverter.ToString(bMD5);
            sMD5Value = sMD5Value.Replace("-", "");

            return sMD5Value;
        }

如果完全转载,请注明出处,谢谢


开源Hash Calculator:MD5、SHA256和SHA512哈希值计算器 在现代信息技术领域,数据的完整性和安全性是至关重要的。哈希计算器作为一种能够生成固定长度字符串以验证数据完整性的工具,已经在多个领域得到了广泛的应用。本章我们将简要介绍哈希计算器的基本概念、工作原理以及它在不同场景下的实际应用。哈希算法是一种将任意长度的输入(又称为预映射pre-image)通过哈希函数转换成固定长度输出的算法,该输出即为哈希值(或哈希码)。哈希算法的作用主要包括数据完整性校验、快速查找、加密等。 阅读详情

相关推荐

HashCalculator(哈希值计算器)v1.2.2.0绿色汉化版

将任意长度的二进制值映射为固定长度的较小二进制值称为哈希值,完成这个计算过程我们需要一些工具。HashCalculator就是这样一款哈希值计算工具,它通过文件和字符串输入来计算哈希值,然后可以选择导出到文本文件。软件操作简单,绿色小巧。

推荐一款强大的哈希计算工具:HashCalculator

是一个开源的命令行工具,专为计算机技术人员设计,用于快速、准确地计算文件的哈希值。这款工具支持多种哈希算法,包括MD5、SHA-1、SHA-256等,并且具有跨平台的特点,可以在Windows、Linux和Mac OS上运行。 ## 技术特性 HashCalculator 使用C++进行开发,这使得它在性能上有着显著优势。以下是它的主要技术亮点: 1. **多平台兼容性** - 通过使用标准

gitblog_00076的博客 5356

文件哈希值计算工具

检测SHA1值官方校验. 可在线核对md5 文件校验工具ihasher是微软原版镜像分享站我告诉你出品的一款富有特色的文件校验值计算工具。ihasher除了能够对镜像进行校验之外,还提供了在线验证功能,如果镜像计算后的校验码与微软原版镜像一致,就能得到镜像的信息,保证镜像的正确性,保证系统的稳定、安全。

在线文件SHA计算工具

工具支持SHA家族算法包括:SHA1,SHA2(SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256),SHA3(SHA3-224、SHA3-256、SHA3-384、SHA3-512)。这个在线工具的一大优点在于它是运行在本地环境,即用户自己的电脑,所以不需要上传文件,安全可靠,因此也支持上G的超大文件。SHA全称:Secure Hash Algorithm,文件SHA哈希计算,通常用于验证文件的完整性。

迷失蒲公英 4254

哈希值计算器

哈希值及其他数值的计算。更改文件后的哈希值会不一样,比较后会得出结论。

hash计算器

哈希计算器,可以快速计算各种文件的哈希值。只需将需要计算的文件拖入主窗口即可快速计算

【亲测免费】 HashCalculator:高效文件哈希处理利器

**HashCalculator** 是一款由C#编写的开源文件哈希值计算工具,旨在简化批处理环境下的文件哈希计算、验证以及重复文件查找等操作。它设计精巧,轻量级且功能强大,适合开发者和普通用户 alike。 ## 核心功能亮点 - **多算法支持**:涵盖SHA系列、SHA3、XXH系列、SM3、MD4/MD5、CRC32等多种哈希算法。 - **批量处理**:能够高效地对大量文件执行哈希计...

gitblog_07558的博客 818

hash值计算工具

一款计算文件hash值和md5值的小工具软件,绿色、免费,无需安装。

超好用的哈希值计算软件MyHash1.4.7[青锐CC]

快速便携的哈希值计算软件MyHash1.4.7

青锐CC 8648

IQA图像质量评价 数据集介绍(LIVE、TID2013、CSIQ、LIVEC、KonIQ-10K)

LIVE、TID2013、CSIQ、LIVEC、KonIQ-10K 数据集介绍

qq_37925923的博客 1万+

【拯救C盘】一文搞懂Windows修改Anaconda默认的虚拟环境存放路径及其原理

Anaconda创建的虚拟环境可能会默认保存在C盘,但C盘的存储空间很宝贵,由于每个虚拟环境的大小可能达到n个GB,稍不注意就会遇到C盘红色警告。因此有必要做点什么来拯救被虚拟环境占用的大部分空间!!!

Roach007的博客 3万+

哈希值批量计算/校验工具 -- HashCalculator v5.24.0 绿色版

HashCalculator是一款专为批量计算和校验文件哈希值而设计的工具,旨在简化批量计算、校验和统计文件的复杂性。它不仅适用于单个文件的哈希值计算,也支持批量处理。该软件支持的哈希算法包括 SHA1、SHA224、SHA256、SHA384、SHA512、SHA3 系列、MD5、Blake2b 系列、Blake2s 系列、Blake3 系列和 Whirlpool。此外,它还支持直接拖拽文件/文件夹到主界面表格中进行计算,并在计算过程中提供暂停、继续、取消任务的功能。

dntkorg的博客 1022

Simulink仿真避坑指南:如何设置步长、powergui和模块采样时间才能让控制周期更稳定

本文深入解析Simulink仿真中步长、powergui和模块采样时间的协同配置方法,帮助工程师解决控制周期不稳定问题。通过实际案例和参数调优技巧,指导用户精准设置仿真参数,确保电机控制、电力电子系统等工业仿真结果的可靠性。

weixin_42524762的博客 419

推荐文章:探索高效数据验证——哈希值批量计算器(HashCalculator)

--- ## 项目介绍 在这个数字化时代,数据的完整性和一致性至关重要。**哈希值批量计算器(HashCalculator)**应运而生,作为一个强大的工具,它简化了文件哈希值的批量计算过程,是开发者、IT管理员以及任何关心文件校验需求用户的理想选择。这款开源软件由心怀热情的开发者hrpzcf打造,并在[GitHub](https://github.com/hrpzcf/HashCalcula

gitblog_00144的博客 1249

SAP PCC成本收集器实战:从配置到结算的完整流程解析

本文详细解析了SAP PCC成本收集器从配置到结算的完整流程,特别适用于重复制造行业。通过实战案例和配置要点,帮助用户掌握物料分类账管理、成本中心费用归集及差异分析等核心功能,提升企业生产成本控制效率。

weixin_29251567的博客 896

Polyworks脚本开发学习笔记(十五)-用Python连接Polyworks的COM组件

Polyworks脚本开发学习笔记(十五)-利用Python连接Polyworks的COM组件

qq_43662503的博客 2504

文件哈希值批量计算器 v6.1.1 免费版

用户可以直接将文件或文件夹拖入软件的主界面进行哈希值计算,软件支持多任务并行计算,用户可以在计算过程中进行暂停、继续、取消等操作。计算完成后,用户可以将结果导出为文本文件,支持.txt和.hcb两种扩展名。文件哈希值批量计算器主要设计用于批量计算、批量校验文件的哈希值,从而减少批量计算、校验、统计的麻烦。尽管如此,该软件对于计算单个文件的哈希值也非常方便和快捷。

BB6842的博客 533

伺服系统控制原理深度解析

摘要:本文系统阐述了伺服系统的控制原理与应用。首先介绍了伺服系统的定义、组成及其在工业自动化中的重要性;然后详细分析了反馈控制机制、稳定性判据和性能指标;重点推导了传递函数和状态空间两种数学模型,并通过LaTeX公式展示了二阶系统建模过程;进而对比了PID控制、状态反馈及自适应控制等方法的优缺点;最后结合数控机床等案例,验证了理论方法的有效性,并展望了伺服系统智能化发展趋势。全文兼顾理论深度与实践指导性,为控制工程领域提供了系统的技术参考。

技术工作者 1267

文件哈希值计算器

用于计算文件md5, sha1, sha256, sha512的命令行程序

ghost_him的博客 1147

UG\NX二次开发 替换部件引用集UF_ASSEM_replace_refset

替换部件引用集UF_ASSEM_replace_refset,需要替换成“完整部件(Entire Part)”需要第三个参数传入空指针或者空字符串。

王牌飞行员_里海的博客 255

使用R语言读取和处理CSV数据集

查看数据集的结构str(data)# 查看数据集的摘要统计信息str()函数将显示数据集的结构信息,包括变量名称、类型和前几行的值。summary()函数将提供数据集的摘要统计信息,如均值、中位数、最小值、最大值等。

CyberGenius的博客 3856

3分钟掌握文件哈希值批量计算:HashCalculator终极免费工具指南

想要快速验证文件完整性?HashCalculator哈希值批量计算工具正是你需要的免费神器!这款开源软件支持多种哈希算法,能够高效完成文件哈希值的批量计算与校验,无论是开发者还是普通用户都能轻松上手。哈希值批量计算器不仅能验证文件完整性,还能查找重复文件、批量校验数据,是文件安全管理的必备工具。 ## 🚀 一键开启文件验证之旅 HashCalculator让文件验证变得异常简单。只需下载软件

gitblog_00025的博客 392

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【免费下载】 HashCalculator 安装和配置指南

### 项目基础介绍 HashCalculator 是一个开源的文件哈希值计算工具,旨在简化批量计算、校验文件哈希值的过程。它支持多种哈希算法,包括 SHA1、SHA2、SHA3、MD5 等,并且能够批量计算、校验、查找重复文件等。HashCalculator 还支持将快捷菜单集成到系统右键菜单中,方便用户快速操作。 ### 主要编程语言 HashCalculator 主要使用 C# 和 C++...

gitblog_07559的博客 1207

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

HashCalculator项目校验依据功能解析与使用指南

HashCalculator作为一款优秀的文件哈希值计算工具,其"校验依据打开"功能在实际使用中扮演着重要角色。本文将深入解析这一功能的技术实现原理,并针对用户常见问题提供解决方案。 ## 功能原理剖析 校验依据打开功能的核心在于哈希值匹配算法。当用户右键点击校验依据时,系统会: 1. 解析用户提供的校验依据文件内容 2. 提取其中的哈希值和对应文件名 3. 与当前计算的文件哈希值进行精确匹...

gitblog_07199的博客 325

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

HashCalculator 教程:一次算清整个文件夹的哈希值,批量校验文件完整性

刚下完一个几百 MB 的安装包,你敢直接双击吗?多数人的第一反应其实是:先看看它的哈希值对不对。可当文件多到几十上百个,逐个手动计算、再逐个肉眼比对,很快就会让人崩溃。HashCalculator 就是为这种批量场景准备的免费工具:把文件和校验清单交给它,批量计算文件哈希值、批量校验文件完整性,还能顺手找出重复文件。它是单文件免安装程序,解压后就能跑,适合软件发布者、运维人员,以及任何想确认下载文

gitblog_01129的博客 104

5分钟精通文件哈希值批量计算:HashCalculator终极操作指南

想要快速掌握文件完整性验证技能?HashCalculator文件哈希值批量计算工具正是你需要的利器。这款开源软件支持多种哈希算法,能够高效完成文件哈希值的批量计算与校验,是开发者和普通用户必备的效率工具。 ## 🔧 工具核心功能解析 ### 高效批量处理能力 HashCalculator最强大的功能之一就是能够同时处理大量文件。无论你需要验证单个文件的完整性,还是需要批量处理整个文件夹中的文

gitblog_00355的博客 799
上一篇: MFC版哈希值计算器的实现(二)
下一篇: 启示录收集
fox4it
博客等级 码龄15年 2粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值