开发者社区> 蓝多多的小仓库> 正文

小知识随手记:MD5加密与SHA-1加密

简介: 小知识随手记:MD5加密与SHA-1加密
+关注继续查看

         在去年软件综合实验中益涵老师特意强调了密码的安全性(输入时(主要是怕被偷看,就是用*****显示)和数据库存储时(存储密文,这才是真正的安全性)),所以当时为了有个好绩点提交最后一天把密码存储采用了简单的哈希加密(同时加盐(Salt))处理。

imageimage.gif

        其实MD5码我们很常见,比如之前下载Mysql的时候细心的宝子就会发现下载按钮下面就有一行MD5码:

imageimage.gif       个人感觉它的作用就是为了判断下载到本地的软件是原始的、未经篡改的文件吧。通过计算本地文件的哈希值,再与官网公开的哈希值对比,如果相同,说明文件下载没问题,否则,说明文件被篡改。哈希算法的目的之一也是为了验证原始数据是否被篡改。(记得美赛的时候队长强调过~)

MD5简介:

        MD5 即 Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。MD5 是输入不定长度信息,输出固定长度 128-bits 的算法。经过程序流程,生成四个32位数据,最后联合起来成为一个 128-bits 散列

        为什么在设定密码的时候要避免一些简单的密码?比较常听说的两种破解办法就是:暴力穷举和彩虹表(一个预先计算好的常用口令和它们的MD5的对照表)攻击。当然为了防止彩虹表攻击也有一个简单的策略便是MD5加盐加密,分为两种,一种随机盐值,和固定盐值,当时我软件综合采用的是随机盐值。

imageimage.gif

SHA-1简介:

        SHA-1(Secure Hash Algorithm 1,安全散列算法1)是一种密码散列函数,SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。

散列函数的两个重要特点:

        第一便是确定性:如果根据同一散列函数得到的两个散列值是不相同的,那么这两个散列值的原始输入也是不相同的。第二点就是散列碰撞(collision):散列函数的输入和输出不是唯一对应关系的,如果两个散列值相同,两个输入值很可能是相同的,但也可能不同。哈希碰撞是指,两个不同的输入得到了相同的输出。碰撞概率的高低关系到哈希算法的安全性。哈希算法的输出长度越长,就越难产生碰撞,也就越安全。

        因为最近在使用IDEA,所以这里用Java做一个简单的代码示例(注释写的很明白了,也方便自己回顾):

/**
 * @author 蓝多多的小仓库
 * @title: myhash
 * @projectName hash
 * @description: ldd_annotation
 * @date 2022/5/5 18:33
 */
import java.math.BigInteger;
import java.security.MessageDigest;
public class myhash {
  public static void main(String[] args) throws Exception {
    // 获取MessageDigest实例
    MessageDigest md = MessageDigest.getInstance("MD5");//哈希算法1:MD5
    MessageDigest md2 = MessageDigest.getInstance("SHA-1");//哈希算法2:SHA-1
    // 调用update(byte[])输入数据
    //getBytes()使用指定的字符集将字符串编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
    md.update("hello_ldd".getBytes("UTF-8"));
    //调用digest()方法获得byte[]数组表示的摘要
    byte[] result = md.digest();
    md2.update("ldd".getBytes("UTF-8"));
    byte[] result2 = md2.digest();
    //如果在操作的时候一个整型数据已经超过了整数的最大类型长度long的话,则此数据就无法装入,所以,此时要使用BigInteger类进行操作
    //第一个参数int signum 如果是 1,则代表BigInteger包装的数计算机存储的二进制为正
    System.out.println(new BigInteger(1, result).toString(16));
    System.out.println(new BigInteger(1, result2).toString(16));
  }
}

image.gif

采用两种哈希加密算法得到的值也是不同滴:

imageimage.gif

这只是一个非常非常简单的例子,后面如果需要还需要进一步学习嗷!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
23639 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
22513 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
21045 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
12023 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
23157 0
使用SSH远程登录阿里云ECS服务器
远程连接服务器以及配置环境
14861 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
36553 0
+关注
蓝多多的小仓库
CSDN全栈领域优质创作者
61
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载