山东大学 信息安全哈希密码(sha0)编写
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=);h]; %检查重复
end
h=lower(h(:)'); %转成列向量
clear x
return; %返回计算得到的哈希值
页:
[1]