利用 Windows Crypt API 获取 MD5/SHA1 值
来源:互联网 发布:东东数据cf刷枪好用么 编辑:程序博客网 时间:2024/05/22 23:19
昨天有人给了我一段据说是根据网上的 java 程序改编的计算 md5 值的 vfp 代码,他说与他使用 md5 计算工具得到的 md5 值不同,想让我看看是哪里改编时出了问题。粗略看了一下,其实这段代码十分眼熟,在 csdn 的 vfp 讨论区中就曾出现过,只是我以前没有需要,所以都是一眼而过,但对那段长长的 hash 变换表却印象深刻。由于我也不知道具体的 md5 值算法,所以也只能先看那段 java 代码,并未发现转换中有何不妥之处。转念一想,Windows Crypt API 中不是也有计算 hash 值的函数吗?只是以前没用过,不熟悉,打开 msdn 找到 Crypt API 这一篇仔细阅读,再参考网上的一些资料,于是有了下面这段代码。
兼回答 tszsc 朋友的问题:
另一种常见的文件/字符串校验方法是SHA1(也称SHA160),它产生的是160/8=20个字节的验证码,比MD5的16个字节稍长一点,只需将上面的代码稍作改造即可实现:
1. 加一个常量定义:#define CALG_SHA1 0x00008004
2. 将 lcHashValue = REPL... 这一句中的 16 改为 20
3. 将调用 CryptCreateHash 函数的第二个参数改成 CALG_SHA1
函数名改为 GetSHA1,如果你有空的话,将错误提示和注释中的 MD5 字样也改过来就更好了。
回答 cslx0810 朋友
这个问题提得有道理,我原来没想将这个函数用来计算超大文件,只想偶尔用来校验一些小数据量的值
下面是可以计算超大文件 md5 值的示例代码,是在上面代码的基础上做了少量修改
我的电脑比较差,用这段代码来计算一个700M的光盘ISO映像文件,用时一般在30秒左右
不过这可能除了跟 CPU/RAM 有关以外,跟文件是否有碎片以及硬盘速度也有很大关系
另外,代码中 BYTES_PER_READ 常量的取值也会对整个计算速度产生较大的影响
我试验的结果是一般要控制在256kb以内,再大就不仅不会快,反而更慢,大概就是俗话“贪多嚼不烂”的道理吧
- 利用 Windows Crypt API 获取 MD5/SHA1 值
- VB6下利用API计算MD2 MD4 MD5 SHA1
- android 获取SHA1值,查看SHA1值,查看MD5值
- android studio 获取SHA1值 MD5值
- android获取应用的MD5,SHA1值
- android studio 获取sha1和md5值
- Android studio获取MD5或者SHA1值
- 获取数字签名(.keystore)SHA1、MD5值
- Android studio获取sha1和MD5值
- Android获取SHA1值和MD5
- Android studio 获取MD5和SHA1值
- Android Studio获取MD5和SHA1值
- Android获取SHA1和MD5值
- MD5和SHA1获取
- 获取SHA1或者MD5
- Android studio (Mac and windows)如何获取SHA1、MD5
- Android Studio如何获取SHA1或MD5(百度地图API开发中用到的SHA1)
- 获取文件MD5,SHA1校验码
- WU反走样(Anti-aliased)直线初探
- POJO
- 关于人性的一些思考:如何提高员工工作热情与成就感,以及因材施教的心灵培训
- 解决MYSQL数据库的乱码问题
- Invalid location of tag (form) 错误
- 利用 Windows Crypt API 获取 MD5/SHA1 值
- 【转贴】学vc/c++之前应三思 c++初学者必看
- 动态数据过滤Filter
- 很好很强大的伸手党.....
- 1104. Don't ask woman about her age
- Dreaming in Code (中文译名梦断代码)免费电子书(free book)下载 download
- 正则表达是判断是否是数字和 - 组成
- 1098. Questions
- smarty