- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个当前仅使用 SHA1 对文件进行哈希处理的程序。没有其他选择。它使用 Lazarus 和 Free Pascal 编译器中的 SHA1 散列函数对它们进行散列。
我已经通过使用 DCPCrypt 库(http://wiki.lazarus.freepascal.org/DCPcrypt 或 http://www.cityinthesky.co.uk/opensource)添加了使用 MD5、SHA256 和 SHA512 的能力。一切正常,但是,如果文件大于 1Mb,我的早期版本会将文件散列在 2Mb 缓冲区中。如果它小于 1Mb,则使用 1024 字节的默认缓冲区,如下所示:
if SizeOfFile > 1048576 then // if > 1Mb
begin
fileHashValue := SHA1Print(SHA1File(NameOfFileToHash, 2097152)); //2Mb buffer
end
else
fileHashValue := SHA1Print(SHA1File(NameOfFileToHash)); //1024 byte buffer
..
SourceData := TFileStream.Create(FileToBeHashed, fmOpenRead);
..
else if SHA1RadioButton2.Checked = true then
begin
varSHA1Hash := TDCP_SHA1.Create(nil);
varSHA1Hash.Init;
varSHA1Hash.UpdateStream(SourceData, SourceData.Size); // HOW DO I ADD A BUFFER HERE?
varSHA1Hash.Final(DigestSHA1);
varSHA1Hash.Free;
for i := 0 to 19 do // 40 character output
GeneratedHash := GeneratedHash + IntToHex(DigestSHA1[i],2);
end // End of SHA1 if
procedure TDCP_hash.UpdateStream(Stream: TStream; Size: longword);
var
Buffer: array[0..8191] of byte;
i, read: integer;
begin
dcpFillChar(Buffer, SizeOf(Buffer), 0);
for i:= 1 to (Size div Sizeof(Buffer)) do
begin
read:= Stream.Read(Buffer,Sizeof(Buffer));
Update(Buffer,read);
end;
if (Size mod Sizeof(Buffer))<> 0 then
begin
read:= Stream.Read(Buffer,Size mod Sizeof(Buffer));
Update(Buffer,read);
end;
end;
最佳答案
回答您的问题:您不能传递不同的大小,但您可以在您提到的方法中更改dcpcrypt2.pas中的数组大小并重新编译DCPCrypt,毕竟它是OSS。
但这不会有太大帮助,因为 fpc 的 sha1 单元不是因为更大的缓冲区大小而更快,而是因为 sha1 算法的实现更快,它利用编译器内在函数来旋转值,这是一个频繁使用的操作sha1 算法。
只是以下具有不同数字命令行参数的程序(例如 8192 和 8388608):
uses
sysutils,sha1;
begin
writeln(SHA1Print(SHA1File('bigfile',StrToInt(paramstr(1)))));
end.
关于freepascal - 如何将更大的缓冲区大小传递给 DCPCrypt 'UpdateStream' 过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7960029/
我正在使用 DCPcrypt 和 SHA512 来哈希字符串。 我正在使用 Warren Postma https://bitbucket.org/wpostma/dcpcrypt2010 的版本
我正在使用 Delphi 2007 中的 DCPcrypt 库来加密内部应用程序的文本。 我当前正在使用以下代码(不是我的实际 key ): Cipher := TDCP_rijndael.Cre
我有一个当前仅使用 SHA1 对文件进行哈希处理的程序。没有其他选择。它使用 Lazarus 和 Free Pascal 编译器中的 SHA1 散列函数对它们进行散列。 我已经通过使用 DCPCryp
我有 DCPCrypt 包(最新版本),并且正在尝试使用来自 NIST 分发的 AES 已知答案测试 (KAT) 向量的测试值在 Delphi2007 中进行 AES/Rijndael CBC 编码(
我在 PHP (openssl_encrypt/'aes-256-cbc') 中加密文本,然后尝试在 Delphi 7 (DCPCrypt/TDCP_rijndael) 中解密它。 PHP 脚本文件以
我在使用 DCP Crypt 库加密和解密某些信息时遇到问题。我正在使用 Delphi XE 和发布在 PHP to Delphi and back Encryption-Decryption usi
我使用的是Delphi 10.3.2我正在尝试将 DCPCrypt 单元与 firemonkey 框架结合使用来加密字符串。它在 Win32、Win64 和 macOS 32 目标上 100% 工作,
我有一个用 Delphi 2007 开发的应用程序,其中一个值由 PHP 加密并在应用程序中解密。加密算法是 RIJNDAEL 128。当我移动 XE2 并安装最新版本的 DCPcrypt 时,应用程
我是一名优秀的程序员,十分优秀!