HashingContext¶
继承: RefCounted < Object
提供逐块计算加密哈希的功能。
描述¶
HashingContext 类提供了一个接口,用于在多次迭代中计算加密哈希值。常用于计算大文件(不必全部加载到内存中)、网络流和一般数据流(不必持有缓冲区)的哈希值。
HashType枚举显示了支持的哈希算法。
const CHUNK_SIZE = 1024
func hash_file(path):
# 检查该文件是否存在。
if not FileAccess.file_exists(path):
return
# 启动一个 SHA-256 context.
var ctx = HashingContext.new()
ctx.start(HashingContext.HASH_SHA256)
# 打开文件进行加密处理。
var file = FileAccess.open(path, FileAccess.READ)
# 阅读每一部分后更新背景信息。
while file.get_position() < file.get_length():
var remaining = file.get_length() - file.get_position()
ctx.update(file.get_buffer(min(remaining, CHUNK_SIZE)))
# 获取计算出的哈希值。
var res = ctx.finish()
# 将结果以十六进制字符串和数组的形式打印出来。
printt(res.hex_encode(), Array(res))
public const int ChunkSize = 1024;
public void HashFile(string path)
{
// 检查该文件是否存在。
if (!FileAccess.FileExists(path))
{
return;
}
// 启动一个 SHA-256 context.
var ctx = new HashingContext();
ctx.Start(HashingContext.HashType.Sha256);
// 打开文件进行加密处理。
using var file = FileAccess.Open(path, FileAccess.ModeFlags.Read);
// 阅读每一部分后更新背景信息。
while (file.GetPosition() < file.GetLength())
{
int remaining = (int)(file.GetLength() - file.GetPosition());
ctx.Update(file.GetBuffer(Mathf.Min(remaining, ChunkSize)));
}
// 获取计算出的哈希值。
byte[] res = ctx.Finish();
// 将结果以十六进制字符串和数组的形式打印出来。
S3.PrintT(res.HexEncode(), (Variant)res);
}
方法¶
finish() |
|
update(chunk: PackedByteArray) |
枚举¶
enum HashType: 🔗
HashType HASH_MD5 = 0
散列算法: MD5.
HashType HASH_SHA1 = 1
散列算法:SHA-1。
HashType HASH_SHA256 = 2
散列算法:SHA-256。
方法说明¶
PackedByteArray finish() 🔗
关闭当前上下文,并返回计算的哈希。
开始给定type的新哈希计算(例如HASH_SHA256开始计算SHA-256)。
Error update(chunk: PackedByteArray) 🔗
使用给定的chunk数据更新计算。