哈希算法又称散列算法,它可以从任何数据中快速的创建一个凭证,而这个凭证很难被推倒出来,因为一丁点的变化会导致凭证的差别恨到,也就是说哈希算法具有不可逆性,因此它在密码数据校验方面用的很广,比如我们常用的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. html5 绘图

    SVG 在 SVG 中,每个元素是图型与数据相结合的一个对象. 修改对象属性的值,图型会立即体现出这种变化. 因为是对象,所以支持事件处理. D3使用的是SVG Canvas 不支持事件处理. cha ...

  2. 使用 OPC Browser 加载 OPC Server 监测点

    1,首先第一步,要连接OPC ,创建好 OPC对象. /// <summary> /// 连接OPC /// </summary> private string OPCIP=1 ...

  3. 记一次 .NET 某妇产医院 WPF内存溢出分析

    一:背景 1. 讲故事 上个月有位朋友通过博客园的短消息找到我,说他的程序存在内存溢出情况,寻求如何解决. 要解决还得通过 windbg 分析啦. 二:Windbg 分析 1. 为什么会内存溢出 大家 ...

  4. log4j漏洞的产生原因和解决方案,小白都能看懂!!!!

    核弹级bug Log4j,相信很多人都有所耳闻了,这两天很多读者都在问我关于这个bug的原理等一些问题,今天咱们就专门写一篇文章,一起聊一聊这个核弹级别的bug的产生原理以及怎么防止 产生原因 其实这 ...

  5. 什么是mysql innodb cluster?

    目录 一.简介 二.特性 一.简介 MySQL InnoDB集群提供了一个集成的,本地的,HA解决方案.MySQL InnoDB集群由以下几部分组成: MySQL Servers with Group ...

  6. [BUUCTF]PWN——[BJDCTF 2nd]ydsneedgirlfriend2

    [BJDCTF 2nd]ydsneedgirlfriend2 附件 步骤: 例行检查,64位程序,开启了canary和nx 试运行一下程序,看看大概的情况,经典的堆块的布局 64位ida载入,习惯性的 ...

  7. 爆款预订,2022 年最值得关注的后台框架 —— Fantastic-admin

    前言 如果 2021 年你还没有听说过 Fantastic-admin ,那即将到来的 2022 年可不要再错过了. Fantastic-admin 做为一款开箱即用的 Vue 中后台管理系统框架,距 ...

  8. chrome/microsoft/brave等浏览器离线下载crx并安装(解决download interrupted)

    重要网站 离线下载crx 问题描述 使用chrome/microsoft edge/ brave 下载chrome webstroe插件时,提示: download interrupted. 解决方案 ...

  9. 【LeetCode】157. Read N Characters Given Read4 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 直接调用 日期 题目地址:https://leetco ...

  10. 【LeetCode】1025. Divisor Game 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 找规律 动态规划 日期 题目地址:https://l ...