我使用在Ada
中创建SHA1
字符串的散列。我的代码基数很小,所以我想避免将任何库导入到我的编译器未提供的项目中,因此我使用的是。据我所知,检索散列的唯一“公共”方法是通过Digest
函数以字符串形式。我想取而代之的是Context
类型的H
成员的160位块。不幸的是,Context
记录是私密的。有什么办法可以解决吗?或者,他们是由GNAT
还是Ada标准库提供的替代方法?从GNAT.SHA1获取SHA1块
1
A
回答
4
我不知道任何直接的方式来获得160位块,但当然你可以从十六进制字符串计算它。
下面是我刚才扔在一起的一个例子。 (当然,通过添加"16#"
和"#"
到十六进制串中提取32位整数可能不是最好的解决方法
with GNAT.SHA1;
with Interfaces;
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
procedure SHA1_Demo is
C: GNAT.SHA1.Context;
package U32_IO is new Ada.Text_IO.Modular_IO(Interfaces.Unsigned_32);
use U32_IO;
begin
GNAT.SHA1.Update(C, "hello");
declare
SHA1: constant String := GNAT.SHA1.Digest(C);
H: array(0..4) of Interfaces.Unsigned_32;
begin
Put_Line("SHA1(""hello"") = " & GNAT.SHA1.Digest(C));
for I in Integer range 0 .. 4 loop
H(I) := Interfaces.Unsigned_32'Value
("16#" & SHA1(I*8+1 .. I*8+8) & "#");
Put("H(");
Put(I, Width => 0);
Put(") = ");
Put(H(I), Base => 16);
New_Line;
end loop;
end;
end SHA1_Demo;
的输出是:
SHA1("hello") = aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
H(0) = 16#AAF4C61D#
H(1) = 16#DCC5E8A2#
H(2) = 16#DABEDE0F#
H(3) = 16#3B482CD9#
H(4) = 16#AEA9434D#
相关问题
- 1. 从QString获取Sha1哈希
- 2. 获取提交给定的SHA1的日期(子模块)提交
- 3. 从块中获取内容
- 4. 从模块中获取值
- 5. 从jquery滑块获取值
- 6. 从类型获取模块
- 7. 从NSURL获取块设备
- 8. 从远程存储库获取期望提交的sha1
- 9. 从delphi的明文+私钥获取sha1消息摘要
- 10. 如何从p12证书中获取SHA1指纹?
- 11. Python - 从SHA1哈希获取至少4个重要字节
- 12. 如何将Bit Torrent info_hash(从Wireshark获取)转换为SHA1哈希
- 13. 的Git从SHA1
- 14. 从捕获块获取回溯
- 15. python sha1取整数
- 16. 从过去获取滑块值
- 17. 从ASP MVC获取Flex模块
- 18. 如何从块中获取NSString?
- 19. 从VPC Terraform社区模块获取subnet_id
- 20. 从python包中获取模块名称
- 21. 从CoreData模块获取数据
- 22. Objective-C从块中获取变量
- 23. 从模板中获取块内容
- 24. Typescript:从本地AMD模块获取intellisense
- 25. 我想从滑块获取图像源?
- 26. 从zip文件获取模块?
- 27. 获取从模块到模板的值
- 28. 从内部获取Python模块Dierctory
- 29. 从外部ctp文件获取块
- 30. Shiny:从模块获取输入
在执行(的一个优点寻找),看起来'Digest(C:Context)'比将'C'中的位转换为hex'好多了,所以除非你打算重新做这个,否则我会认为你的最好的选择是凯基汤普森所暗示的。 – 2012-01-14 12:19:35
我认为@Keith Thompson的建议是对我的具体问题的最好回答。最终,我d准备下载John Halleck的SHA1 [实施](http://home.utah.edu/~nahaj/ada/sha/);只有3个源文件添加到我的项目。 – Anthony 2012-01-15 12:14:42