使用SHA1算法,生成某个字符串的hash值作为该字符串所代表对象的唯一标识;

Demo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks; namespace SHA1Demo
{
class Program
{
static void Main(string[] args)
{
var input_str = "客户@编号";
var output_str = Program.SHA1_Hash(input_str);
Console.Write($"SHA1 Base64String: {output_str}");
Console.WriteLine();
output_str = Program.SHA1(input_str);
Console.Write($"SHA1 BitConverter: {output_str}\n");
output_str = Program.HMACSHA1_Hash(input_str,"test");
Console.Write($"SHA1 HMACSHA1: {output_str}");
Console.ReadLine();
} public static string SHA1(string content)
{
try
{
SHA1 sha1 = new SHA1CryptoServiceProvider();
byte[] bytes_in = UTF8Encoding.UTF8.GetBytes(content);
byte[] bytes_out = sha1.ComputeHash(bytes_in);
sha1.Dispose();
string result = BitConverter.ToString(bytes_out);
result = result.Replace("-", "").ToLower();
return result;
}
catch (Exception ex)
{
throw new Exception("SHA1加密出错:" + ex.Message);
}
} /// <summary>
/// 哈希Sha1加密输出Base64字符
/// </summary>
/// <param name="str_sha1_in"></param>
/// <returns></returns>
public static string SHA1_Hash(string str_sha1_in)
{
SHA1 sha1 = new SHA1CryptoServiceProvider();
byte[] bytes_sha1_in = UTF8Encoding.UTF8.GetBytes(str_sha1_in);
byte[] bytes_sha1_out = sha1.ComputeHash(bytes_sha1_in);
string str_sha1_out = Convert.ToBase64String(bytes_sha1_out);
str_sha1_out = str_sha1_out.Replace("-", ""); return str_sha1_out;
} /// <summary>
/// 哈希sha1加密输出字节数组
/// </summary>
/// <param name="str_sha1_in"></param>
/// <returns></returns>
public static byte[] SHA1_HashBytes(string str_sha1_in)
{
SHA1 sha1 = new SHA1CryptoServiceProvider();
byte[] bytes_sha1_in = UTF8Encoding.UTF8.GetBytes(str_sha1_in);
byte[] bytes_sha1_out = sha1.ComputeHash(bytes_sha1_in);
return bytes_sha1_out;
} public static string HMACSHA1_Hash(string strText,string strKey)
{
HMACSHA1 myHMACSHA1 = new HMACSHA1(Encoding.UTF8.GetBytes(strKey));
byte[] byteText = myHMACSHA1.ComputeHash(Encoding.UTF8.GetBytes(strText));
return System.Convert.ToBase64String(byteText); }
}
}

输出:

SHA1 Base64String: 06YnDCZ3gXWBReR5dHgtY56A438=
SHA1 BitConverter: d3a6270c267781758145e47974782d639e80e37f
SHA1 HMACSHA1: HrVyvnnPgMulvCBaaIP2gQUgJtM=

相关学习参考链接:

https://www.cnblogs.com/fullsail/archive/2013/02/22/2921505.html

https://blog.csdn.net/weixin_38756990/article/details/72177367

SHA1字符串加密的更多相关文章

  1. ASP.NET 常用的字符串加密

    字符串常用的加密有三种 1.MD5加密,这个常用于密码,单向加密,不可解密,有些在线解密的可以解大部份,用代码不能实现,如果不想让人解密,加密后随便截取一段就好了: 2.Base64位加密,通常加密后 ...

  2. C# 字符串加密解密方法

    这个是加密的算法的命名空间,使用加密算法前要引用该程序集  System.Security.Cryptography using System;using System.Data;using Syst ...

  3. MD5字符串加密

    MD5字符串加密 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为RFC 132 ...

  4. 利用javascript对字符串加密

    没事利用js写个对字符串加密的方法,基本原理就是先把字符串转化成对应的unicode(用到的方法是charCodeAt()),再把unicode统一减去100(这里加减随便你取多少),把得到的unic ...

  5. iOS字符串加密至MD5&及获取文件MD5

    iOS 字符串加密至MD5 #import <CommonCrypto/CommonDigest.h> + (NSString *) md5:(NSString *)str { const ...

  6. Labview实现字符串加密

    Labview实现字符串加密 对字符串进行加密,规则是每个字母后移5 位 例如A 变为F,b 变为g,x 变为c,y 变为d- 实现效果 后端实现

  7. Dotfuscator可以实现混淆代码、变量名修改、字符串加密

    C#编写的代码如果不进行一定程度的混淆和加密,那么是非常容易被反编译进行破解的,特别是对于一些商业用途的C#软件来说,因为盯着的人多,更是极易被攻破.使用VS自带的Dotfuscator可以实现混淆代 ...

  8. 敏感字符串加密处理(PHP实现)

    /** * 敏感字符串加密处理 * @param $raw_str 原始字符串 * @param $before 前面保留的显示位数 * @param $after 后面保留的显示位数 * @para ...

  9. C# 字符串加密解密函数

    原文:C# 字符串加密解密函数 using System; using System.Text;using System.Security.Cryptography; using System.IO; ...

  10. nefu 1116 字符串加密

    字符串加密 Problem : 1116 Time Limit : 1000ms Memory Limit : 65536K description 给你一段经过加密的字符串,我们称之为密文,现在请你 ...

随机推荐

  1. 面试官:来谈谈Vue3的provide和inject实现多级传递的原理

    前言 没有看过provide和inject函数源码的小伙伴可能觉得他们实现数据多级传递非常神秘,其实他的源码非常简单,这篇文章欧阳来讲讲provide和inject函数是如何实现数据多级传递的.ps: ...

  2. Zcmu-1178

    思路: 分析题目要求的就是由2,3,5,7单独相乘或者组合相乘的数字. 所以将数字循环起来相乘,之后结果按从大到小地无重复放进数组当中. 学长 #include<set> #include ...

  3. 案例 | 销讯通加持药企SFE部门效能提升

    为了获取更大的市场空间,医药健康行业正迎来一波前所未有的产业升级.尽管不少企业取得了许多成绩,但仍面临诸多挑战. 江苏某制药公司在心脑血管.中枢神经.胃肠内科.心脏科.内分泌科.皮肤科和风湿科等领域均 ...

  4. DOM元素高度获取踩坑

    前情 最近在开发一个需求,需要做一个滚动列表展示当前中奖用户,但是列表每一项高度又不是固定的,每次滚动前需要先获取当前要滚动的块是多高才知道要滚动多少. 坑位 在开发这个滚动列表的时候发现滚着滚着就会 ...

  5. 解决WSL2无法启动提示“找不到元素”

    最近一段时间没有看 docker desktop,忽然想起来打开看看,结果死活启动不了.以前卸载之后,重新安装就好了,同样的方法尝试了很多次还是不太行,重启也不行... 后来想想是不是 wsl 出了问 ...

  6. Dockerr安装Oracle以及使用DBeaver连接

    拉取镜像 pull container-registry.oracle.com/database/free:latest 创建容器 说明一下我现在的最新版本是23 docker run -d --na ...

  7. server.error.include-message

    使用的thymeleaf模板引擎,默认前端无法获取message和exception 想要在前端获取到message和exception,配置一下配置 server.error.include-exc ...

  8. 【原创】利用gitlab多项目自动部署到多个网站目录,自动同步更新,不用插件,重写钩子

    原创内容,分享请保留链接. 0.首先在服务器安装gitlab,网上一堆过程省略 1.建几个空仓库admin.web.xxxx等(1个仓库也行).确保每个仓库名称和网站名称要有一致性,比如仓库叫admi ...

  9. Qt/C++音视频开发49-多级连保存和推流设计(同时保存到多个文件/推流到多个平台)

    一.前言 近期遇到个用户需要多级联的保存和推流,在ffmpegsave多线程保存类中实现这个功能,越简单越好,就是在推流的同时,能够开启自动转储功能,一边推流的同时一边录像保存到本地视频文件.最初设想 ...

  10. Qt开发经验小技巧121-130

    QLineEdit除了单纯的文本框以外,还可以做很多特殊的处理用途. 限制输入只能输入IP地址. 限制输入范围,强烈推荐使用 QRegExpValidator 正则表达式来处理. //正在表达式限制输 ...