SHA-256算法流程分析与演示——github工程完善
https://github.com/in3rsha/sha256-animation
上面是原作者github代码,写的是相当吊,笔者将其代码进行进行了复现和SHA-256算法的学习如下文
https://blog.csdn.net/daviddou2022/article/details/149207087
除此之外,笔者在上一篇文章中也提到原作者的工程有可完善之处,主要是对于命令行输入参数这一块,因此笔者对于sha-256的功能进行完善,完整的工程如下:
https://github.com/daviddou2023/sha256-explanation
1、message.rb
不需要修改原代码
2、padding.rb
将红框标出的三行原代码改成下面的,原代码最终的message赋值是二进制,也就是说只有当命令行参数输入为二进制才能执行,但是考虑到message一般为字符串,所以做此修改。
# Use command line argument if provided, else default to "abc"$input = ARGV[0] || "abc" $message = $input.unpack("B*")[0] # Convert to binary string
3、blocks.rd
同padding.rd修改方式
# Use command line argument if provided, else default to "abc"$input = ARGV[0] || "abc" $message = $input.unpack("B*")[0] # Convert to binary string
4、schedule.rd
红框的代码换为下面的代码
5、expansion.rb
还是将input的部分同上修改,还需要注意的是将原代码中的block赋值部分删掉。
# Use command line argument if provided, else default to "abc"$input = ARGV[0] || "abc" $message = $input.unpack("B*")[0] # Convert to binary string
6、initial.rb
不涉及到输入参数,不需要修改,直接ruby initial.rb
7、t1.rb t2.rb
同理代码替换
# Use command line argument if provided, else default to "abc"$input = ARGV[0] || "abc" $message = $input.unpack("B*")[0] # Convert to binary string
8、compression.rb
# Use command line argument if provided, else default to "abc"$input = ARGV[0] || "abc" $message = $input.unpack("B*")[0] # Convert to binary string
9、final.rb
# Use command line argument if provided, else default to "abc"$input = ARGV[0] || "abc" $message = $input.unpack("B*")[0] # Convert to binary string
10、sha-256.rb
不需要修改原代码