山东大学 信息安全哈希密码(sha0)编写

[复制链接]
查看203 | 回复0 | 2024-1-12 19:50:13 来自手机 | 显示全部楼层 |阅读模式
function h = hash(input,category)
input=input(:); %把 input 转换成列向量的形式
% 如果输入数据是字符或逻辑类型,则将其转换为无符号 int 类型。
if ischar(input) || islogical(input)
input=uint8(input);
end
%根据输入选择使用不同的 hash 算法
category=upper(category);
switch category
case 'SHA1'
category='SHA-1';
case 'SHA256'
category='SHA-256';
case 'SHA384'
category='SHA-384';
case 'SHA512'
category='SHA-512';
end
%algs 里面为所有 hash 的类型
algs={'SHA-1','SHA-256','SHA-384','SHA-512'};
if isempty(strmatch(category,algs,'exact')) %判断输入的哈希函数是否正确
error(['Hash algorithm must be SHA-1, SHA-256, SHA-384, or SHA-512']);
end
%借助 Java 中的 message.digest 类,getInstance 可以返回实现指定摘要算法的
MessageDigest 对象
x=java.security.MessageDigest.getInstance(category); %获取输入哈希算法的
MessageDigest 对象
x.update(input); %更新到缓冲区
h=typecast(x.digest,'uint8');
h=dec2hex(h)';%这里把转置回去,方便下面判断
if(size(h,1))==1 % 检查字符串长度是否为 1,如果是,则添加前导零。因为哈希值通常由
多个字节组成
h=[repmat('0',[1 size(h,2)]);h]; %检查重复
end
h=lower(h(:)'); %转成列向量
clear x
return; %返回计算得到的哈希值

评分

参与人数 1金币 +5 收起 理由
admin + 5 感谢分享,奖励5个金币,期待更多优质内容.

查看全部评分

您需要登录后才可以回帖 登录 | 立即注册 微信登录 手机动态码快速登录

本版积分规则