ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【Zig】Zig 中 Hash 的使用,如 Md5、Sha1

2022-08-10 21:00:36  阅读:148  来源: 互联网

标签:std Sha1 hash Zig input Md5 out


Zig 中做Md5 和 Sha1 之类的Hash 非常简单的,现在支持Hash 算法有,blanke2Blanke3GimliMd5Sha1sha2sha3,还有一个 组合 composition

Md5

pub fn md5() void {
    const Md5 = std.crypto.hash.Md5;

    var out: [Md5.digest_length]u8 = undefined;

    const input = "1234567890";

    Md5.hash(input, &out, .{});

    std.debug.print("\"{s}\" md5 code is {s}\n", .{ input, std.fmt.fmtSliceHexLower(out[0..]) });
}

"1234567890" md5 code is e807f1fcf82d132f9bb018ca6738a19f

Sha1

pub fn sha1() void {
    const Sha1 = std.crypto.hash.Sha1;

    var out: [Sha1.digest_length]u8 = undefined;

    const input = "1234567890";

    Sha1.hash(input, &out, .{});

    std.debug.print("\"{s}\" sha1 code is {s}\n", .{ input, std.fmt.fmtSliceHexLower(out[0..]) });
}

"1234567890" sha1 code is 01b307acba4f54f55aafc33bb06bbbf6ca803e9a

Composition

组合可以把两相同 api 的 hash 进行组合计算,默认提供了 Sha256oSha256、Sha384oSha384、Sha512oSha512。

我们可以试试来组合 Md5 和 Sha1,

pub fn composition() void {
    const Md5oSha1 = std.crypto.hash.composition.Composition(std.crypto.hash.Md5, std.crypto.hash.Sha1);

    var out: [Md5oSha1.digest_length]u8 = undefined;

    const input = "1234567890";

    Md5oSha1.hash(input, &out, .{});

    std.debug.print("\"{s}\" Md5oSha1 code is {s}\n", .{ input, std.fmt.fmtSliceHexLower(out[0..]) });
}

"1234567890" Md5oSha1 code is 1e0a1082ef56d0586330c3c46c5d46d1

这个组件的操作会先计算 Sha1 ,得到的结果再进行 Md5 计算。就相当于下面的代码:

pub fn md5OSha1() void {
    const Md5 = std.crypto.hash.Md5;
    const Sha1 = std.crypto.hash.Sha1;

    const input = "1234567890";

    var out: [Sha1.digest_length]u8 = undefined;
    var dest: [Md5.digest_length]u8 = undefined;

    Sha1.hash(input, &out, .{});

    Md5.hash(&out, &dest, .{});

    std.debug.print("\"{s}\" same Md5oSha1 code is {s}\n", .{ input, std.fmt.fmtSliceHexLower(dest[0..]) });
}

标签:std,Sha1,hash,Zig,input,Md5,out
来源: https://www.cnblogs.com/gaoshang212/p/16573880.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有