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

    和大家分享一个shell脚本写的图片抓取器.使用方法:img_downloader.sh.使用时在shell下输入:./img_downloader.sh www.baidu.com -d image ...

  2. my41_主从延迟大排查

    半同步复制 主库执行 INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; SET GLOBAL rpl_semi_sync ...

  3. jQuery节点更新

    一.插入子节点 var $newNode1 = $("<p>我是p标签</p>"); 加入之后,原来的会删除. 二.插入兄弟节点 三.替换节点 1.HTML ...

  4. 【Matlab】find函数用法

    find(A):返回向量中非零元素的位置 注意返回的是位置的脚标 //类似python,还是很好用的 如果是二维矩阵,是先横行后列的 b=find(a),a是一个矩阵,查询非零元素的位置 如果X是一个 ...

  5. 【Linux】【CentOS】【FTP】FTP服务器安装与配置(vsftpd、lftp)

    [初次学习.配置的笔记,如有不当,欢迎在评论区纠正 -- 萌狼蓝天 @ 2021-12-02] 基本概念 FTP访问方式 实体账号:本地账户 来宾账户:guest 匿名登录:anonymous fp ...

  6. mit6.830 - lab1 - 存储模型 - 题解

    1.Intro github : https://github.com/CreatorsStack/CreatorDB lab1实现数据库基本的存储逻辑结构,具体包括:Tuple,TupleDesc, ...

  7. [BUUCTF]REVERSE——[BJDCTF2020]easy

    [BJDCTF2020]easy 附件 例行检查,无壳,32位程序 32位ida载入,main函数和字符串理都没有找到有关flag的提示 根据main函数的提示,有关flag的函数应该被藏起来了,在左 ...

  8. 资源工作表中与资源有关的操作(Project)

    <Project2016 企业项目管理实践>张会斌 董方好 编著 这个内容,我需要专门写一篇吗? 不写吧,好像对不起我那股学习的劲:写吧,实在是--一句话就够了:所有与任务有关的新建.修改 ...

  9. UVA760 DNA Sequencing 题解

    Content 给出两个小写字母组成的字符串,求两个字符串的最长公共子串,如有多个按字典序顺序输出,如没有输出 No common sequence.,每两组数据间输出一个空行,最后一组数据后不应输出 ...

  10. LuoguP7505 「Wdsr-2.5」小小的埴轮兵团 题解

    Content 给出一个范围为 \([-k,k]\) 的数轴,数轴上有 \(n\) 个点,第 \(i\) 个点的位置为 \(a_i\).有 \(m\) 次操作,有且仅有以下三种: 1 x:所有点往右移 ...