三 、使用openssl进行sha256加密(再谈)

本文详细探讨了使用openssl进行sha256加密时遇到的问题,包括文件大小、数据源和换行等问题,并给出了解决方案。通过分析算法和代码,作者解决了大文件摘要不一致的难题,建议在验证算法时使用命令行工具。
摘要由CSDN通过智能技术生成

关于sha256实现的一些细节。



前言

上一篇介绍了sha256的简单用法,后来我在实际使用过程中遇到了一些问题,所以再补一章。


一、计算文件的摘要出错了?

  我当时为了先把sha256的需求对付过去,所以获取出来的sha256跟网上的一样也就OK了,后来我试了下去计算一个大一点文件摘要,这时候就出问题了。不管怎么操作,一直跟网上的对不上,苦恼了好一会。研究了好些时间终于有点思路了。

二、问题出在哪里了

  1.算法问题?
  2.文件大小问题?
  3.最终计算的源数据问题?

1.算法问题

  对文件计算出错,我开始就想到了是不是实现有问题,我就去看网上的文章,但是最终的结果是,感觉几无差异,方法都是一样的,难道其他大佬没遇到这个问题?有用EVP实现的,但是不符合我们讨论的范畴。而且通过上一篇的文章我觉得我的实现应该八九不离十,所以我先暂时放一放这个点,进而去研究文件大小问题。

2.文件大小

 1.数据源不对

  既然大文件出错,那咱们就从小文件着手实现吧。先对一个测试文件实现sha256,文件中包含一个字符“1” 测试结果如下:

./$ a.out hhh.c 
f1b2f662800122bed0ff255693df89c4487fbdcf453d3524a42d4ec20c3d9c04

在这里插入图片描述  跟这个线上的网站对比出现问题了。那就试试用指令行来处理试试

$ sha256sum hhh.c 
f1b2f662800122bed0ff255693df89c4487fbdcf453d3524a42d4ec20c3d9c04  hhh.c
//然后继续用之openssl来计算
$ openssl dgst -sha256 -hex -out getsha256 hhh.c 
$ cat getsha256 
SHA256(hhh.c)= f1b2f662800122bed0ff255693df89c4487fbdcf453d3524a42d4ec20c3d9c04

  跟我自己的算法算出来的一样?整蒙了都,那就开始怀疑是不是数据源有问题?我们用hexdump试试:

$ hexdump -C hhh.c 
00000000  31 0d 0a                                          |1..|
00000003

  这时候发现了问题,我只是键入了“1”,为什么后面跟着“0d”,“0a”?
  也许有某些编辑器机制我不了解,我先尝试去掉这些多余的字符。

$ hexdump -C hhh.c 
00000000  31                                                |1|
00000001
//这次很干净

  将数据源处理干净了,继续尝试计算sha256。

$ ./a.out hhh.c 
6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b
$ sha256sum hhh.c 
6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b  hhh.c
$ openssl dgst -sha256 -hex -out getsha256 hhh.c 
$ cat getsha256 
SHA256(hhh.c)= 6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b

  这里验证了是数据源导致的之前sha256不一致,也反向证明了,我现在的算法是正确的。
后来经过研究,在对文件进行编辑的时候vi或者vim会自动在末尾添加换行。可以关闭自动加换行就能避免这个问题,如何配置读者可以自己修改配置文件–vimrc。
  既然我们的算法已经对了,那就继续把数据加大验证。

$ hexdump -C hhh.c 
00000000  31 31 31 31 31 31 31 31  31 31 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值