SHA1StreamRange

密码学

描述

AnsiString

/ByteRange哈希输入是字节区间 [0, FirstLength) 加上字节区间 [SecondStart, SecondStart + SecondLength),与 PDF 签名的 /Contents 布局一致,其中必须跳过

语法

Delphi

Function SHA1StreamRange(Input: TStream; FirstLength, SecondStart, SecondLength: Int64): AnsiString;

参数

Input要哈希的流;该函数在每个段之前都会定位,因此进入时的流位置无关紧要
FirstLength从流位置 0 开始哈希的字节数,即半开区间 [0, FirstLength);0 表示跳过第一段
SecondStart第二个哈希段开始的流偏移,通常为签名 /Contents 空洞之后的首个字节
SecondLength从 SecondStart 开始哈希的字节数,即半开区间 [SecondStart, SecondStart + SecondLength);0 表示跳过第二段

返回值

打包进 AnsiString 的 20 字节原始 SHA-1 摘要;无法创建 CryptoAPI 提供程序或哈希对象、或某个哈希步骤失败时返回空字符串

说明

委托给共享的 SHAStreamRange 辅助函数,该函数获取 PROV_RSA_AES CryptoAPI 上下文,以最多 8000 字节的块哈希 CALG_SHA1,并忽略每次流读取的返回数量;与 SHA-3 流变体不同,此辅助函数不拒绝负的区间值,保留 SHA-1 是为了旧版签名互操作

示例

Digest:= SHA1StreamRange(FS, ByteRange[0], ByteRange[2], ByteRange[3]);

另请参阅

SHA256ByteArray, SHA384ByteArray, SHA512ByteArray, SHA3_256ByteArray, SHA3_384ByteArray, SHA3_512ByteArray, SHA256StreamRange, SHA384StreamRange, SHA512StreamRange, SHA3_256StreamRange, SHA3_384StreamRange, SHA3_512StreamRange, SHAKE256ByteArray, SHAKE256StreamRange