互联网并发与安全系列教程(12) - 信息加密技术(单向散列加密)

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 互联网并发与安全系列教程(12) - 信息加密技术(单向散列加密)

1. 简介

散列是信息的提炼,通常其长度要比信息小得多,且为一个固定长度。加密性强的散列一定是不可逆的,这就意味着通过散列结果,无法推出任何部分的原始信息。任何输入信息的变化,哪怕仅一位,都将导致散列结果的明显变化,这称之为“雪崩效应”。散列还应该是防冲突的,即找不出具有相同散列结果的两条信息。具有这些特性的散列结果就可以用于验证信息是否被修改。

单向散列函数一般用于产生消息摘要,密钥加密等,常见的有:

  • MD5(Message Digest Algorithm 5) :是RSA数据安全公司开发的一种单向散列算法,非可逆,相同的明文产生相同的密文。
  • SHA(Secure Hash Algorithm):可以对任意长度的数据运算生成一个160位的数值;

SHA-1与MD5的比较:

因为二者均由MD4导出,SHA-1和MD5彼此很相似。相应的,他们的强度和其他特性也是相似,但还有以下几点不同:

  1. 对强行供给的安全性:最显著和最重要的区别是SHA-1摘要比MD5摘要长32 位。使用强行技术,产生任何一个报文使其摘要等于给定报摘要的难度对MD5是2128数量级的操作,而对SHA-1则是2160数量级的操作。这样,SHA-1对强行攻击有更大的强度。
  2. 对密码分析的安全性:由于MD5的设计,易受密码分析的攻击,SHA-1显得不易受这样的攻击。
  3. 速度:在相同的硬件上,SHA-1的运行速度比MD5慢。

About单项散列加密:

  • 特征:雪崩效应、定长输出和不可逆。
  • 作用:确保数据的完整性。
  • 加密算法:md5(标准密钥长度128位)、sha1(标准密钥长度160位)、md4、CRC-32。
  • 加密工具:md5sum、sha1sum、openssl dgst。
  • 计算某个文件的hash值,例如:md5sum/shalsum FileName,openssl dgst –md5/-sha

2. MD5加密

可以在线MD5加密:http://www.cmd5.com/

使用Java可以进行MD5加密,一般采用MD5加盐的方式:

一般使用的加盐:

MD5 (Password+UserName),即将用户名和密码字符串相加再MD5,这样的MD5摘要基本上不可反查。有时候用户名可能会发生变化,发生变化后密码即不可用了(验证密码实际上就是再次计算摘要的过程)。

因此我们做了一个非常简单的加盐算法,每次保存密码到数据库时,都生成一个随机16位数字,将这16位数字和密码相加再求MD5摘要,然后在摘要中再将这16位数字按规则掺入形成一个48位的字符串。

在验证密码时再从48位字符串中按规则提取16位数字,和用户输入的密码相加再MD5。按照这种方法形成的结果肯定是不可直接反查的,且同一个密码每次保存时形成的摘要也都是不同的。

代码如下:

/**
 * MD5加盐加密
 */
public class PasswordUtil {
  /**
   * 生成含有随机盐的密码
   */
  public static String generate(String password) {
    Random r = new Random();
    StringBuilder sb = new StringBuilder(16);
    sb.append(r.nextInt(99999999)).append(r.nextInt(99999999));
    int len = sb.length();
    if (len < 16) {
      for (int i = 0; i < 16 - len; i++) {
        sb.append("0");
      }
    }
    String salt = sb.toString();
    password = md5Hex(password + salt);
    char[] cs = new char[48];
    for (int i = 0; i < 48; i += 3) {
      cs[i] = password.charAt(i / 3 * 2);
      char c = salt.charAt(i / 3);
      cs[i + 1] = c;
      cs[i + 2] = password.charAt(i / 3 * 2 + 1);
    }
    return new String(cs);
  }
  /**
   * 校验密码是否正确
   */
  public static boolean verify(String password, String md5) {
    char[] cs1 = new char[32];
    char[] cs2 = new char[16];
    for (int i = 0; i < 48; i += 3) {
      cs1[i / 3 * 2] = md5.charAt(i);
      cs1[i / 3 * 2 + 1] = md5.charAt(i + 2);
      cs2[i / 3] = md5.charAt(i + 1);
    }
    String salt = new String(cs2);
    return md5Hex(password + salt).equals(new String(cs1));
  }
  /**
   * 获取十六进制字符串形式的MD5摘要
   */
  public static String md5Hex(String src) {
    try {
      MessageDigest md5 = MessageDigest.getInstance("MD5");
      byte[] bs = md5.digest(src.getBytes());
      return new String(new Hex().encode(bs));
    } catch (Exception e) {
      return null;
    }
  }
  public static void main(String[] args) {
    // 加密+加盐
    String password1 = generate("admin");
    System.out.println("结果:" + password1 + "   长度:" + password1.length());
    // 解码
    System.out.println(verify("admin", password1));
    // 加密+加盐
    String password2 = generate("admin");
    System.out.println("结果:" + password2 + "   长度:" + password2.length());
    // 解码
    System.out.println(verify("admin", password2));
  }
}


目录
相关文章
|
1月前
|
安全 网络安全 区块链
网络安全与信息安全:构建数字世界的防线在当今数字化时代,网络安全已成为维护个人隐私、企业机密和国家安全的重要屏障。随着网络攻击手段的不断升级,从社交工程到先进的持续性威胁(APT),我们必须采取更加严密的防护措施。本文将深入探讨网络安全漏洞的形成原因、加密技术的应用以及提高公众安全意识的重要性,旨在为读者提供一个全面的网络安全知识框架。
在这个数字信息日益膨胀的时代,网络安全问题成为了每一个网民不可忽视的重大议题。从个人信息泄露到企业数据被盗,再到国家安全受到威胁,网络安全漏洞如同隐藏在暗处的“黑洞”,时刻准备吞噬掉我们的信息安全。而加密技术作为守护网络安全的重要工具之一,其重要性不言而喻。同时,提高公众的安全意识,也是防范网络风险的关键所在。本文将从网络安全漏洞的定义及成因出发,解析当前主流的加密技术,并强调提升安全意识的必要性,为读者提供一份详尽的网络安全指南。
|
24天前
|
存储 安全 5G
|
29天前
|
安全 算法 网络安全
网络安全与信息安全:守护数字世界的坚盾在这个高度数字化的时代,网络安全和信息安全已成为全球关注的焦点。无论是个人隐私还是企业数据,都面临着前所未有的风险和挑战。本文将深入探讨网络安全漏洞、加密技术以及安全意识的重要性,旨在为读者提供实用的知识,帮助构建更加安全的网络环境。
【10月更文挑战第4天】 在数字化浪潮中,网络安全与信息安全成为不可忽视的议题。本文通过分析网络安全漏洞的类型与成因,探讨加密技术的原理与应用,并强调提升安全意识的必要性,为读者提供一套全面的网络安全知识框架。旨在帮助个人和企业更好地应对网络威胁,保护数字资产安全。
110 65
|
20天前
|
存储 安全 前端开发
端到端加密:确保数据传输安全的最佳实践
【10月更文挑战第12天】端到端加密(E2EE)是确保数据传输安全的重要手段,通过加密技术保障数据在传输过程中的隐私与完整性,防止第三方窃听和篡改。本文介绍E2EE的工作原理、核心优势及实施步骤,并探讨其在即时通讯、文件共享和金融服务等领域的应用,强调了选择加密协议、密钥管理、数据加密及安全接口设计的重要性,旨在帮助企业和开发者有效保护用户数据,满足数据保护法规要求。
|
1月前
|
SQL 安全 算法
网络安全与信息安全:构建数字世界的防线在数字化浪潮席卷全球的今天,网络安全与信息安全已成为维系社会秩序、保障个人隐私与企业机密的重要基石。本文旨在深入探讨网络安全漏洞的本质、加密技术的前沿进展以及提升安全意识的有效策略,为读者揭示数字时代下信息保护的核心要义。
本文聚焦网络安全与信息安全领域,详细剖析了网络安全漏洞的形成机理、常见类型及其潜在危害,强调了及时检测与修复的重要性。同时,文章系统介绍了对称加密、非对称加密及哈希算法等主流加密技术的原理、应用场景及优缺点,展现了加密技术在保障数据安全中的核心地位。此外,针对社会普遍存在的安全意识薄弱问题,提出了一系列切实可行的提升措施,如定期安全培训、强化密码管理、警惕钓鱼攻击等,旨在引导公众树立全面的网络安全观,共同构筑数字世界的安全防线。
|
1月前
|
安全 算法 Java
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
本文提供了在数据库中对密码等敏感信息进行加盐加密的详细教程,包括手写MD5加密算法和使用Spring Security的BCryptPasswordEncoder进行加密,并强调了使用BCryptPasswordEncoder时需要注意的Spring Security配置问题。
100 0
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
|
2月前
|
SQL 安全 网络安全
网络安全的盾牌:漏洞防御与信息加密技术
【9月更文挑战第27天】在数字时代,网络安全和信息安全成为维护数据完整性、保密性和可用性的关键因素。本文将探讨网络安全漏洞的概念、成因及预防措施,同时深入讨论加密技术在保护信息安全中的作用。通过分析安全意识的重要性和提升方法,旨在为读者提供一套全面的网络安全知识框架,以增强个人和组织对抗网络威胁的能力。
39 5
|
25天前
|
安全 大数据 网络安全
网络安全与信息安全:守护数字世界的坚盾在数字化浪潮席卷全球的今天,网络安全已成为维系社会稳定、促进经济发展的重要基石。本文旨在深入探讨网络安全漏洞、加密技术及安全意识等核心议题,通过分享前沿知识与实用策略,助力构建更加安全可靠的网络环境。
【10月更文挑战第8天】 本文聚焦网络安全领域的关键要素,包括安全漏洞的识别与防御、加密技术的演进与应用,以及安全意识的培养与提升。通过对最新研究成果和实际案例的分析,文章揭示了网络安全威胁的多样性和复杂性,强调了综合防护策略的重要性。同时,倡导社会各界共同参与,形成全民网络安全意识,共筑数字空间的安全防线。
49 0
|
1月前
|
存储 安全 数据库
Uno Platform 安全数据存储秘籍大公开!加密、存储、读取全攻略,让你的数据固若金汤!
在 Uno Platform 中实现安全的数据存储需要选择合适的数据存储方式,并对存储的数据进行加密。通过加密数据,可以保护用户的敏感信息,防止数据泄露。同时,在读取和使用数据时,需要进行解密操作,确保数据的可用性。希望本文对你在 Uno Platform 中实现安全的数据存储有所帮助。
27 0
|
3天前
|
安全 算法 网络安全
网络防御的艺术:揭秘加密技术与安全意识的重要性
【10月更文挑战第30天】在数字化时代,网络安全已成为我们生活中不可或缺的部分。本文旨在揭示网络安全漏洞的成因,探讨如何通过加密技术和提升安全意识来构建坚固的网络防线。文章将深入分析常见的安全威胁,并分享实用的防护策略,帮助读者在日益复杂的网络环境中保持警觉和安全。
50 29