.net 哈希
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks; namespace HashTest
{
class Program
{
static void Main(string[] args)
{
string plainText = ".Net5 框架";
// 因为所有哈希函数的输入类型都是 Byte[],所以必须先将源数据转换为字节数组后再计算哈希值。
byte[] plainByte = ASCIIEncoding.ASCII.GetBytes(plainText);
Console.WriteLine("明文字符串:" + plainText);
Console.WriteLine("======================================================"); Console.ForegroundColor = ConsoleColor.Red;
MD5Hash(plainByte);
Console.ForegroundColor = ConsoleColor.Green;
SHA1Hash(plainByte);
Console.ForegroundColor = ConsoleColor.DarkYellow;
SHA512Hash(plainByte);
Console.ReadKey();
} /// <summary>
/// MD5哈希计算
/// </summary>
static void MD5Hash(byte[] plainByte)
{
// MD5本身是一个抽象类
MD5 md5 = MD5.Create(); // 默认实现类:Create("System.Security.Cryptography.MD5");
byte[] hashByte = md5.ComputeHash(plainByte);
Console.WriteLine("1.0:MD5默认实现类对明文字符串进行哈希计算后的结果:");
Console.WriteLine(ByteArrayToString(hashByte));
Console.WriteLine("======================================================"); // MD5的两个派生类:System.Security.Cryptography.MD5Cng 和 System.Security.Cryptography.MD5CryptoServiceProvider
MD5 md5Cng = MD5.Create("System.Security.Cryptography.MD5Cng");
byte[] cngHashByte = md5Cng.ComputeHash(plainByte);
Console.WriteLine("1.1:设置MD5的静态方法Create的参数为System.Security.Cryptography.MD5Cng,哈希结果为:");
Console.WriteLine(ByteArrayToString(cngHashByte));
Console.WriteLine("======================================================"); MD5 md5CryptoServiceProvider = MD5.Create("System.Security.Cryptography.MD5CryptoServiceProvider");
byte[] providerHashByte = md5CryptoServiceProvider.ComputeHash(plainByte);
Console.WriteLine("1.2:设置MD5的静态方法Create的参数为System.Security.Cryptography.MD5CryptoServiceProvider,哈希结果为:");
Console.WriteLine(ByteArrayToString(providerHashByte));
Console.WriteLine("======================================================"); // 直接使用派生类进行哈希
MD5Cng md5Cng2 = new MD5Cng();
byte[] cngHashByte2 = md5Cng.ComputeHash(plainByte);
Console.WriteLine("2.0:直接使用MD5的派生类MD5Cng进行哈希,哈希结果为:");
Console.WriteLine(ByteArrayToString(cngHashByte2));
Console.WriteLine("======================================================"); MD5CryptoServiceProvider md5CryptoServiceProvider2 = new MD5CryptoServiceProvider();
byte[] providerHashByte2 = md5Cng.ComputeHash(plainByte);
Console.WriteLine("2.1:直接使用MD5的派生类MD5CryptoServiceProvider进行哈希,哈希结果为:");
Console.WriteLine(ByteArrayToString(providerHashByte2));
Console.WriteLine("======================================================");
} /// <summary>
/// SHA1哈希
/// </summary>
/// <param name="plainByte"></param>
static void SHA1Hash(byte[] plainByte)
{
// SHA1本身是一个抽象类
SHA1 sha1 = SHA1.Create(); // 默认实现类:Create("System.Security.Cryptography.SHA1");
byte[] hashByte = sha1.ComputeHash(plainByte);
Console.WriteLine("1.0:SHA1默认实现类对明文字符串进行哈希计算后的结果:");
Console.WriteLine(ByteArrayToString(hashByte));
Console.WriteLine("======================================================"); // SHA1的两个派生类:System.Security.Cryptography.SHA1Cng 和 System.Security.Cryptography.SHA1CryptoServiceProvider
SHA1 sha1Cng = SHA1.Create("System.Security.Cryptography.SHA1Cng");
byte[] cngHashByte = sha1Cng.ComputeHash(plainByte);
Console.WriteLine("1.1:设置SHA1的静态方法Create的参数为System.Security.Cryptography.SHA1Cng,哈希结果为:");
Console.WriteLine(ByteArrayToString(cngHashByte));
Console.WriteLine("======================================================"); SHA1 sha1CryptoServiceProvider = SHA1.Create("System.Security.Cryptography.SHA1CryptoServiceProvider");
byte[] providerHashByte = sha1CryptoServiceProvider.ComputeHash(plainByte);
Console.WriteLine("1.2:设置SHA1的静态方法Create的参数为System.Security.Cryptography.SHA1CryptoServiceProvider,哈希结果为:");
Console.WriteLine(ByteArrayToString(providerHashByte));
Console.WriteLine("======================================================"); // 直接使用派生类进行哈希
SHA1Cng sha1Cng2 = new SHA1Cng();
byte[] cngHashByte2 = sha1Cng2.ComputeHash(plainByte);
Console.WriteLine("2.0:直接使用SHA1的派生类SHA1Cng进行哈希,哈希结果为:");
Console.WriteLine(ByteArrayToString(cngHashByte2));
Console.WriteLine("======================================================"); SHA1CryptoServiceProvider sha1CryptoServiceProvider2 = new SHA1CryptoServiceProvider();
byte[] providerHashByte2 = sha1CryptoServiceProvider2.ComputeHash(plainByte);
Console.WriteLine("2.1:直接使用SHA1的派生类SHA1CryptoServiceProvider进行哈希,哈希结果为:");
Console.WriteLine(ByteArrayToString(providerHashByte2));
Console.WriteLine("======================================================");
} static void SHA256Hash(byte[] plainByte)
{ } static void SHA384Hash(byte[] plainByte)
{ } static void SHA512Hash(byte[] plainByte)
{
// 直接使用派生类进行哈希
SHA512Cng sha512Cng2 = new SHA512Cng();
byte[] cngHashByte2 = sha512Cng2.ComputeHash(plainByte);
Console.WriteLine("2.0:直接使用SHA512的派生类SHA512Cng进行哈希,哈希结果为:");
Console.WriteLine(ByteArrayToString(cngHashByte2));
Console.WriteLine("======================================================"); SHA512CryptoServiceProvider sha512CryptoServiceProvider2 = new SHA512CryptoServiceProvider();
byte[] providerHashByte2 = sha512CryptoServiceProvider2.ComputeHash(plainByte);
Console.WriteLine("2.1:直接使用SHA512的派生类SHA512CryptoServiceProvider进行哈希,哈希结果为:");
Console.WriteLine(ByteArrayToString(providerHashByte2));
Console.WriteLine("======================================================"); SHA512Managed sha512Managed = new SHA512Managed();
byte[] sha512ManagedHashByte = sha512Managed.ComputeHash(plainByte);
Console.WriteLine("2.2:直接使用SHA512的派生类SHA512Managed进行哈希,哈希结果为:");
Console.WriteLine(ByteArrayToString(sha512ManagedHashByte));
Console.WriteLine("======================================================");
} /// <summary>
/// 字节数组转化成16进制字符串
/// </summary>
/// <param name="arrInput"></param>
/// <returns></returns>
static string ByteArrayToString(byte[] arrInput)
{
int i;
StringBuilder sOutput = new StringBuilder(arrInput.Length);
for (i = ; i < arrInput.Length - ; i++)
{
sOutput.Append(arrInput[i].ToString("X2"));
}
return sOutput.ToString();
}
}
}
.net 哈希的更多相关文章
- [PHP内核探索]PHP中的哈希表
在PHP内核中,其中一个很重要的数据结构就是HashTable.我们常用的数组,在内核中就是用HashTable来实现.那么,PHP的HashTable是怎么实现的呢?最近在看HashTable的数据 ...
- java单向加密算法小结(2)--MD5哈希算法
上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...
- Java 哈希表运用-LeetCode 1 Two Sum
Given an array of integers, find two numbers such that they add up to a specific target number. The ...
- 网络安全——Base64编码、MD5、SHA1-SHA512、HMAC(SHA1-SHA512)哈希
据说今天520是个好日子,为什么我想起的是502.500.404这些?还好服务器没事! 一.Base64编码 Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之 ...
- Oracle 哈希连接原理
<基于Oracle的sql优化>里关于哈希连接的原理介绍如下: 哈希连接(HASH JOIN)是一种两个表在做表连接时主要依靠哈希运算来得到连接结果集的表连接方法. 在Oracle 7.3 ...
- SQL连接操作符介绍(循环嵌套, 哈希匹配和合并连接)
今天我将介绍在SQLServer 中的三种连接操作符类型,分别是:循环嵌套.哈希匹配和合并连接.主要对这三种连接的不同.复杂度用范例的形式一一介绍. 本文中使用了示例数据库AdventureWorks ...
- BZOJ 3555: [Ctsc2014]企鹅QQ [字符串哈希]【学习笔记】
3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 2046 Solved: 749[Submit][Statu ...
- [bzoj3207][花神的嘲讽计划Ⅰ] (字符串哈希+主席树)
Description 背景 花神是神,一大癖好就是嘲讽大J,举例如下: “哎你傻不傻的![hqz:大笨J]” “这道题又被J屎过了!!” “J这程序怎么跑这么快!J要逆袭了!” …… 描述 这一天D ...
- minHash最小哈希原理
minHash最小哈希原理 收藏 初雪之音 发表于 9个月前 阅读 208 收藏 9 点赞 1 评论 0 摘要: 在数据挖掘中,一个最基本的问题就是比较两个集合的相似度.通常通过遍历这两个集合中的所有 ...
- .net的一致性哈希实现
最近在项目的微服务架构推进过程中,一个新的服务需要动态伸缩的弹性部署,所有容器化示例组成一个大的工作集群,以分布式处理的方式来完成一项工作,在集群中所有节点的任务分配过程中,由于集群工作节点需要动态增 ...
随机推荐
- HDU 3727 Jewel 主席树
题意: 一开始有一个空序列,然后有下面四种操作: Insert x在序列尾部加入一个值为\(x\)的元素,而且保证序列中每个元素都互不相同. Query_1 s t k查询区间\([s,t]\)中第\ ...
- edge浏览器识别ip地址为手机号的解决办法
edge浏览器识别ip地址为手机号的解决办法 今天突然发现类似101.231.70.242的ip地址会在edge浏览器里面识别为可点击的链接,后来看了一下,原因就是被识别为手机号了,因为我发现点击的时 ...
- 控制台窗口和powershell运行服务会卡住的解决办法
之前使用nodejs做了一个简单的web服务,通过控制台窗口运行,通过浏览器访问发现有时候浏览器等很久数据都加载不出来,以为是代码有问题,后来发现是控制台卡住了,按一下enter键就好了,当时百度了一 ...
- Java-创建一个线程
第一种继承Thread类 package com.tj; public class BasicThread1 extends Thread { public void run() { System.o ...
- 实现类似QQ单一账户登录,在另一个地方登录后在原登录窗口提示下线
首先,使用框架做的最好,可以在框架页直接做一次就好了 再登陆成功后保存session的代码后添加以下代码: 注意:需要引入命名空间using System.Collections; SetApplic ...
- ogre3D学习基础9 -- 光源程序实例
这一章练习一下光源的使用,光源分为三种:点光源,聚光源,有向光.具体内容前面说过,这里就不解释了. 继续在上一章的程序的基础上实现. 1.创建摄像机(Camera) createCamera()函数是 ...
- xml编辑无提示?这么破!
在学习testng这个单元测试框架时,如果咱们碰到了编辑测试套件xml,不提示的情况(有提示方便咱们学习,并且testng的测试套件定义必须按照他的dtd文件约束来),咱们可以按照下面的步骤去解决这个 ...
- 换一种思维看待PHP VS Node.js
php和javascript都是非常流行的编程语言,刚刚开始一个服务于服务端,一个服务于前端,长久以来,它们都能够和睦相处,直到有一天,一个叫做node.js的JavaScript运行环境诞生后,再加 ...
- CODE FESTIVAL 2017 qual B
昨晚因为有点事就去忙了,没打后悔啊 A - XXFESTIVAL Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem ...
- Good Bye 2017
太菜了啊,一不小心就goodbye rating了 A. New Year and Counting Cards time limit per test 1 second memory limit p ...