MD5,SHA1及SHA256等哈希加密方法实现:Java,C#,Golang,Python
哈希算法又称散列算法,它可以从任何数据中快速的创建一个凭证,而这个凭证很难被推倒出来,因为一丁点的变化会导致凭证的差别恨到,也就是说哈希算法具有不可逆性,因此它在密码数据校验方面用的很广,比如我们常用的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的更多相关文章
- 哈希加密算法 MD5,SHA-1,SHA-2,SHA-256,SHA-512,SHA-3,RIPEMD-160 - aTool
一.MD5哈希加密算法 atool.org MD5即Message-Digest Algorithm 5(信息-摘要算法 5),用于确保信息传输完整一致.是计算机广泛使用的散列算法之一(又译摘要算法. ...
- 转载:哈希加密算法 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),用于确保信息传输完整一致.是计算 ...
- 摘要算法CRC8、CRC16、CRC32,MD2 、MD4、MD5,SHA1、SHA256、SHA384、SHA512,RIPEMD、PANAMA、TIGER、ADLER32
1.CRC8.CRC16.CRC32 CRC(Cyclic Redundancy Check,循环冗余校验)算法出现时间较长,应用也十分广泛,尤其是通讯领域,现在应用最多的就是 CRC32 算法,它产 ...
- Java 常见摘要算法——md5、sha1、sha256
目录 摘要算法简介 md5 使用jdk内置方法实现md5加密 使用bc方式实现md5加密 使用cc方式实现md5加密 sha1 使用jdk内置方法实现sha1加密 使用bc方式实现sha1加密 使用c ...
- .Net Core 最优 MD5 打开方式!初学者建议收藏(支持 SHA1,SHA256,.Net Framework)
public static string GetMd5Hash(string input) { using (MD5 md5Hash = MD5.Create()) { // Convert the ...
- 添砖加瓦:几种常见的数据摘要算法(MD5、CRC32、SHA1和SHA256)
1.算法概述 数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名.数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密.数据摘要算法也被称为哈希(H ...
- hashlib加密模块主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法,HMAC消息签名(HMAC-SHA1,....)
hashlib模块 用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 MD5 摘要输出 # ...
- MD5 SHA1 SHA256 SHA512 SHA1WithRSA 的区别
MD5 SHA1 SHA256 SHA512 这4种本质都是摘要函数,不通在于长度 MD5 是 128 位,SHA1 是 160 位 ,SHA256 是 256 位,SHA512 是512 位. ...
- Hash校验工具、MD5 SHA1 SHA256命令行工具
MyHash 检验工具http://www.zdfans.com/html/4346.html HashMyFiles Hash校验工具http://www.nirsoft.net/utils/has ...
随机推荐
- 2.8 rust 枚举与模式匹配
Enums and Pattern Matching 摘要 枚举定义 enum IpAddrKind { V4, V6, } 枚举方法 fn main() { enum Message { Quit, ...
- Dubbo声明式缓存
为了进一步提高消费者对用户的响应速度,减轻提供者的压力,Dubbo提供了基于结果的声明式缓存.该缓存是基于消费者端的,所以使用很简单,只需修改消费者配置文件,与提供者无关 一.创建消费者07-cons ...
- 什么是微服务,SpringBoot和SpringCloud的关系和区别
什么是微服务? 就目前而言对于微服务业界没有一个统一的,标准的定义.但通常而言,微服务是一种架构模式或者说是一种架构风格,它提倡单一应用程序划分为一组小的服务,每个服务在其独立的自己的进程中,服务之间 ...
- MFC入门示例之水平滚动条和垂直滚动条(CScroll Bar)
初始化滚动条 1 //初始化滚动条 2 SCROLLINFO si = { 0 }; 3 si.cbSize = sizeof(si); 4 si.fMask = SIF_RANGE | SIF_PA ...
- 数据恢复binlog2sql
目录 一.原理及其使用 用途 闪回原理简析 binlog 有三种可选的格式: 来实例演习下来实例演习下 二.准备工作 一.原理及其使用 生产上误删数据.误改数据的现象也是时常发生的现象,作为运维这时候 ...
- 02-多任务-thread
多任务-Thread 一.理解并行与并发 并行:cpu数多于任务数 例如: 一共有三个任务,分别是:QQ.微信.陌陌:一共有四个CPU,每个任务占据一个CPU. 并发:CPU数少于任务数 例如: 一共 ...
- [BUUCTF]PWN——mrctf2020_easyoverflow
mrctf2020_easyoverflow 附件 步骤: 例行检查,64位程序,保护全开 本地试运行的时候就直接一个输入,然后就没了,直接用64位ida打开 只要满足18行的条件,就能够获取shel ...
- Niushop开源商店渗透测试
靶机 提取码:le8l 首先连上靶机 先扫一下靶场ip,看看开启了哪些端口 开启了80端口,扫描一下目录 一个shop的界面, 一个admin后台管理界面 其他的目录翻看了一下, 看样子是网站的配置文 ...
- 有个性的手动计划模式(Project)
<Project2016 企业项目管理实践>张会斌 董方好 编著 任务工作表里默认的标题"工期"."开始时间"."结束时间"这些 ...
- M语言中的引用(Power Query 之 M 语言)
名词 查询表 函数 行{}/列[] 单元格 表(Table) 列表(List) 记录(Record) 引用[查询表] =查询表表名 引用[应用的步骤] =步骤名 引用表中的[单元格](深化) =表{行 ...