哈希算法又称散列算法,它可以从任何数据中快速的创建一个凭证,而这个凭证很难被推倒出来,因为一丁点的变化会导致凭证的差别恨到,也就是说哈希算法具有不可逆性,因此它在密码数据校验方面用的很广,比如我们常用的MD5、SHA1、SHA256、SHA384、SHA512等等

  本文主要从应用的角度使用各语言去应用各种哈希加密算法:

  Java

  Java实现注入MD5等哈希算法的加密方式可以通过java.security.MessageDigest类来实现:  

    import java.nio.charset.Charset;
import java.security.MessageDigest; public class HashMain { public static void main(String[] args) {
String text = "上山打老虎";
String[] encryptTypes = new String[] { "md5", "sha-1", "sha-256",
"sha-384", "sha-512" };
for (String encryptType : encryptTypes) {
try {
String encryptText = encrypt(text, encryptType);
System.out.printf("【%s】经过【%s】加密后:%s\n", text, encryptType,
encryptText);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} } public static String encrypt(String value, String algorithmName)
throws Exception {
if (value == null || value.length() == 0)
return ""; MessageDigest messageDigest = MessageDigest.getInstance(algorithmName);
byte[] buffer = value.getBytes(Charset.forName("utf-8"));
buffer = messageDigest.digest(buffer); // 使用hex格式数据输出
StringBuffer result = new StringBuffer();
for (int i = 0; i < buffer.length; i++) {
result.append(String.format("%02x", buffer[i]));
}
return result.toString();
}
}

  执行结果:

  

  C#

  C#实现各种哈希加密算法通过System.Security.Cryptography.HashAlgorithm来实现:    

    using System;
using System.Security.Cryptography;
using System.Text; namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
string text = "上山打老虎";
string[] encryptTypes = new[] { "md5", "sha1", "sha256", "sha384", "sha512" };
foreach (string encryptType in encryptTypes)
{
string encryptText = Encrypt(text, encryptType);
Console.WriteLine($"【{text}】经过【{encryptType}】加密后:{encryptText}");
}
}
/// <summary>
/// 加密
/// </summary>
/// <param name="value">加密字符串</param>
/// <param name="encryptType">加密方式</param>
/// <returns></returns>
public static string Encrypt(string value, string encryptType)
{
if (string.IsNullOrEmpty(value)) return value; using (var hashAlgorithm = HashAlgorithm.Create(encryptType))
{
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(value);
buffer = hashAlgorithm.ComputeHash(buffer);
hashAlgorithm.Clear(); //使用hex格式数据输出
StringBuilder result = new StringBuilder();
foreach (byte b in buffer)
{
result.AppendFormat("{0:x2}", b);
}
return result.ToString();
//或者使用下面的输出
//return BitConverter.ToString(buffer).Replace("-", "").ToLower();
}
}
}
}

  执行结果:

  

  Golang

  Golang实现各种哈希加密算法的结构体在crypto包中,但是需要导入对应的包,如:    

package main

import (
"crypto"
//导入
_ "crypto/md5"
_ "crypto/sha1"
_ "crypto/sha256"
_ "crypto/sha512"
"fmt"
"io"
) func main() {
text := "上山打老虎"
encryptTypes := []crypto.Hash{crypto.MD5, crypto.SHA1, crypto.SHA256, crypto.SHA384, crypto.SHA512}
for _, encryptType := range encryptTypes {
encryptText, err := Encrypt(text, encryptType)
if err != nil {
fmt.Printf("【%s】加密错误:%s\n", encryptType, err.Error())
} else {
fmt.Printf("【%s】经过【%s】加密后:%s\n", text, encryptType, encryptText)
}
}
} func Encrypt(value string, hash crypto.Hash) (string, error) {
if value == "" {
return value, nil
}
var _hash = hash.New()
if _, err := io.WriteString(_hash, value); err != nil {
return "", err
}
result := fmt.Sprintf("%x", _hash.Sum(nil))
return result, nil
}

  执行结果:

  

  Python

  Python实现各种哈希加密算法的就很简单了,而且有多种方式,比如:

  方式一:使用hashlib

import hashlib

text = "上山打老虎"
buffer = text.encode(encoding='UTF-8')
encryptTypes = ["md5", "sha1", "sha256", "sha384", "sha512"]
for encryptType in encryptTypes:
encryptText = hashlib.new(encryptType, buffer).hexdigest()
print("【", text, "】经过", encryptType, "加密后:", encryptText)

  执行结果:

  

  方式二:使用Crypto.Hash,注意,需要安装pycrypto,可以使用pip安装:pip install pycryptodome(如果安装不了,先卸载旧版本再安装:pip uninstall pycrypto)

# 需要安装pycrypto,可以使用pip安装:pip install pycryptodome
from Crypto.Hash import MD5, SHA1, SHA256, SHA384, SHA512 text = "上山打老虎"
buffer = text.encode(encoding='UTF-8')
encryptTypes = [MD5, SHA1, SHA256, SHA384, SHA512]
for encryptType in encryptTypes:
hash = encryptType.new(buffer)
encryptText = hash.hexdigest()
print("【", text, "】经过", encryptType.__name__, "加密后:", encryptText)

  执行结果:

  

MD5,SHA1及SHA256等哈希加密方法实现:Java,C#,Golang,Python的更多相关文章

  1. 哈希加密算法 MD5,SHA-1,SHA-2,SHA-256,SHA-512,SHA-3,RIPEMD-160 - aTool

    一.MD5哈希加密算法 atool.org MD5即Message-Digest Algorithm 5(信息-摘要算法 5),用于确保信息传输完整一致.是计算机广泛使用的散列算法之一(又译摘要算法. ...

  2. 转载:哈希加密算法 MD5,SHA-1,SHA-2,SHA-256,SHA-512,SHA-3,RIPEMD-160 - aTool

    http://www.atool.org/hash.php 一.MD5哈希加密算法 MD5即Message-Digest Algorithm 5(信息-摘要算法 5),用于确保信息传输完整一致.是计算 ...

  3. 摘要算法CRC8、CRC16、CRC32,MD2 、MD4、MD5,SHA1、SHA256、SHA384、SHA512,RIPEMD、PANAMA、TIGER、ADLER32

    1.CRC8.CRC16.CRC32 CRC(Cyclic Redundancy Check,循环冗余校验)算法出现时间较长,应用也十分广泛,尤其是通讯领域,现在应用最多的就是 CRC32 算法,它产 ...

  4. Java 常见摘要算法——md5、sha1、sha256

    目录 摘要算法简介 md5 使用jdk内置方法实现md5加密 使用bc方式实现md5加密 使用cc方式实现md5加密 sha1 使用jdk内置方法实现sha1加密 使用bc方式实现sha1加密 使用c ...

  5. .Net Core 最优 MD5 打开方式!初学者建议收藏(支持 SHA1,SHA256,.Net Framework)

    public static string GetMd5Hash(string input) { using (MD5 md5Hash = MD5.Create()) { // Convert the ...

  6. 添砖加瓦:几种常见的数据摘要算法(MD5、CRC32、SHA1和SHA256)

    1.算法概述 数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名.数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密.数据摘要算法也被称为哈希(H ...

  7. hashlib加密模块主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法,HMAC消息签名(HMAC-SHA1,....)

    hashlib模块 用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 MD5 摘要输出 # ...

  8. MD5 SHA1 SHA256 SHA512 SHA1WithRSA 的区别

    MD5 SHA1 SHA256 SHA512 这4种本质都是摘要函数,不通在于长度  MD5 是 128 位,SHA1  是 160 位 ,SHA256  是 256 位,SHA512 是512 位. ...

  9. Hash校验工具、MD5 SHA1 SHA256命令行工具

    MyHash 检验工具http://www.zdfans.com/html/4346.html HashMyFiles Hash校验工具http://www.nirsoft.net/utils/has ...

随机推荐

  1. EBS 抓trace 文件

    如果要对FORM的操作做TRACE操作,可以使用 帮助->诊断->跟踪 中启用跟踪功能来实现. 但是如果要实现对并发请求的trace,需要在 系统管理员->并发->方案-> ...

  2. Mysql的索引调优详解:如何去创建索引以及避免索引失效

    在正式介绍Mysql调优之前,先补充mysql的两种引擎 mysql逻辑分层 InnoDB:事务优先(适合高并发操作,行锁) MyISAM:性能优先(表锁) 查看使用的引擎: show variabl ...

  3. DOM解析xml学习笔记

    一.dom解析xml的优缺点 由于DOM的解析方式是将整个xml文件加载到内存中,转化为DOM树,因此程序可以访问DOM树的任何数据. 优点:灵活性强,速度快. 缺点:如果xml文件比较大比较复杂会占 ...

  4. Shell脚本实现监视指定进程的运行状态

    在之前的博客中,曾经写了自动化测试程序的实现方法,现在开发者需要知道被测试的进程(在此指运行在LINUX上的主进程的)在异常退出之前的进程的运行状态,例如内存的使用率.CPU的使用率等. 现用shel ...

  5. mysql 将A表的a字段赋值给B表的b字段

    A.B为2个不同的表,将A表的a字段赋值给B表的b字段:update B set b = (select a from A where A.id = B.id) where B.b is null 注 ...

  6. SQL错误总结

    ORA-00918: column ambiguously defined 异常原因: select 查询的字段在from的两张表中都存在,导致数据库无法区别需要查询的字段来自于哪张表 以下是例子 s ...

  7. jstl中的foreach标签

    <%@ page import="java.util.ArrayList" %><%@ page import="java.util.List" ...

  8. 莫烦python教程学习笔记——使用鸢尾花数据集

    # View more python learning tutorial on my Youtube and Youku channel!!! # Youtube video tutorial: ht ...

  9. JDK的简介,卸载和安装过程

    JDK的简介,卸载和安装过程 JDK JRE JVM JDK:Java Development Kit JRE:Java Runtime Environment JVM:Java Virtual Ma ...

  10. mysql--求中位数

    第一种求中位数方法: /* 第一步:添加一个正序和反序 第二步:当列表数目为奇数的时候,列表选出的情况,当列表为偶数的时候列表的情况 第三步:统筹奇数和偶数时中位数 */ select sum(Mat ...