技术标签: C#
using System;
using System.IO;
using System.Text;
using System.Globalization;
using System.Collections.Generic;
using System.Security.Cryptography;
namespace Utils
{
/// <summary>
/// 密码加密解密操作相关类
/// </summary>
public static class PassWordHelper
{
#region MD5 加密
/// <summary>
/// MD5加密
/// </summary>
public static string Md532(this string source)
{
if (source.IsEmpty()) return null;
var encoding = Encoding.UTF8;
MD5 md5 = MD5.Create();
return HashAlgorithmBase(md5, source, encoding);
}
/// <summary>
/// 加盐MD5加密
/// </summary>
public static string Md532Salt(this string source, string salt)
{
return salt.IsEmpty() ? source.Md532() : (source + "『" + salt + "』").Md532();
}
#endregion
#region SHA 加密
/// <summary>
/// SHA1 加密
/// </summary>
public static string Sha1(this string source)
{
if (source.IsEmpty()) return null;
var encoding = Encoding.UTF8;
SHA1 sha1 = new SHA1CryptoServiceProvider();
return HashAlgorithmBase(sha1, source, encoding);
}
/// <summary>
/// SHA256 加密
/// </summary>
public static string Sha256(this string source)
{
if (source.IsEmpty()) return null;
var encoding = Encoding.UTF8;
SHA256 sha256 = new SHA256Managed();
return HashAlgorithmBase(sha256, source, encoding);
}
/// <summary>
/// SHA512 加密
/// </summary>
public static string Sha512(this string source)
{
if (source.IsEmpty()) return null;
var encoding = Encoding.UTF8;
SHA512 sha512 = new SHA512Managed();
return HashAlgorithmBase(sha512, source, encoding);
}
#endregion
#region HMAC 加密
/// <summary>
/// HmacSha1 加密
/// </summary>
public static string HmacSha1(this string source, string keyVal)
{
if (source.IsEmpty()) return null;
var encoding = Encoding.UTF8;
byte[] keyStr = encoding.GetBytes(keyVal);
HMACSHA1 hmacSha1 = new HMACSHA1(keyStr);
return HashAlgorithmBase(hmacSha1, source, encoding);
}
/// <summary>
/// HmacSha256 加密
/// </summary>
public static string HmacSha256(this string source, string keyVal)
{
if (source.IsEmpty()) return null;
var encoding = Encoding.UTF8;
byte[] keyStr = encoding.GetBytes(keyVal);
HMACSHA256 hmacSha256 = new HMACSHA256(keyStr);
return HashAlgorithmBase(hmacSha256, source, encoding);
}
/// <summary>
/// HmacSha384 加密
/// </summary>
public static string HmacSha384(this string source, string keyVal)
{
if (source.IsEmpty()) return null;
var encoding = Encoding.UTF8;
byte[] keyStr = encoding.GetBytes(keyVal);
HMACSHA384 hmacSha384 = new HMACSHA384(keyStr);
return HashAlgorithmBase(hmacSha384, source, encoding);
}
/// <summary>
/// HmacSha512 加密
/// </summary>
public static string HmacSha512(this string source, string keyVal)
{
if (source.IsEmpty()) return null;
var encoding = Encoding.UTF8;
byte[] keyStr = encoding.GetBytes(keyVal);
HMACSHA512 hmacSha512 = new HMACSHA512(keyStr);
return HashAlgorithmBase(hmacSha512, source, encoding);
}
/// <summary>
/// HmacMd5 加密
/// </summary>
public static string HmacMd5(this string source, string keyVal)
{
if (source.IsEmpty()) return null;
var encoding = Encoding.UTF8;
byte[] keyStr = encoding.GetBytes(keyVal);
HMACMD5 hmacMd5 = new HMACMD5(keyStr);
return HashAlgorithmBase(hmacMd5, source, encoding);
}
/// <summary>
/// HmacRipeMd160 加密
/// </summary>
public static string HmacRipeMd160(this string source, string keyVal)
{
if (source.IsEmpty()) return null;
var encoding = Encoding.UTF8;
byte[] keyStr = encoding.GetBytes(keyVal);
HMACRIPEMD160 hmacRipeMd160 = new HMACRIPEMD160(keyStr);
return HashAlgorithmBase(hmacRipeMd160, source, encoding);
}
#endregion
#region AES 加密解密
/// <summary>
/// AES加密
/// </summary>
/// <param name="source">待加密字段</param>
/// <param name="keyVal">密钥值</param>
/// <param name="ivVal">加密辅助向量</param>
/// <returns></returns>
public static string AesStr(this string source, string keyVal, string ivVal)
{
var encoding = Encoding.UTF8;
byte[] btKey = keyVal.FormatByte(encoding);
byte[] btIv = ivVal.FormatByte(encoding);
byte[] byteArray = encoding.GetBytes(source);
string encrypt;
Rijndael aes = Rijndael.Create();
using (MemoryStream mStream = new MemoryStream())
{
using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateEncryptor(btKey, btIv), CryptoStreamMode.Write))
{
cStream.Write(byteArray, 0, byteArray.Length);
cStream.FlushFinalBlock();
encrypt = Convert.ToBase64String(mStream.ToArray());
}
}
aes.Clear();
return encrypt;
}
/// <summary>
/// AES解密
/// </summary>
/// <param name="source">待加密字段</param>
/// <param name="keyVal">密钥值</param>
/// <param name="ivVal">加密辅助向量</param>
/// <returns></returns>
public static string UnAesStr(this string source, string keyVal, string ivVal)
{
var encoding = Encoding.UTF8;
byte[] btKey = keyVal.FormatByte(encoding);
byte[] btIv = ivVal.FormatByte(encoding);
byte[] byteArray = Convert.FromBase64String(source);
string decrypt;
Rijndael aes = Rijndael.Create();
using (MemoryStream mStream = new MemoryStream())
{
using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateDecryptor(btKey, btIv), CryptoStreamMode.Write))
{
cStream.Write(byteArray, 0, byteArray.Length);
cStream.FlushFinalBlock();
decrypt = encoding.GetString(mStream.ToArray());
}
}
aes.Clear();
return decrypt;
}
/// <summary>
/// AES Byte类型 加密
/// </summary>
/// <param name="data">待加密明文</param>
/// <param name="keyVal">密钥值</param>
/// <param name="ivVal">加密辅助向量</param>
/// <returns></returns>
public static byte[] AesByte(this byte[] data, string keyVal, string ivVal)
{
byte[] bKey = new byte[32];
Array.Copy(Encoding.UTF8.GetBytes(keyVal.PadRight(bKey.Length)), bKey, bKey.Length);
byte[] bVector = new byte[16];
Array.Copy(Encoding.UTF8.GetBytes(ivVal.PadRight(bVector.Length)), bVector, bVector.Length);
byte[] cryptograph;
Rijndael aes = Rijndael.Create();
try
{
using (MemoryStream mStream = new MemoryStream())
{
using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateEncryptor(bKey, bVector), CryptoStreamMode.Write))
{
cStream.Write(data, 0, data.Length);
cStream.FlushFinalBlock();
cryptograph = mStream.ToArray();
}
}
}
catch
{
cryptograph = null;
}
return cryptograph;
}
/// <summary>
/// AES Byte类型 解密
/// </summary>
/// <param name="data">待解密明文</param>
/// <param name="keyVal">密钥值</param>
/// <param name="ivVal">加密辅助向量</param>
/// <returns></returns>
public static byte[] UnAesByte(this byte[] data, string keyVal, string ivVal)
{
byte[] bKey = new byte[32];
Array.Copy(Encoding.UTF8.GetBytes(keyVal.PadRight(bKey.Length)), bKey, bKey.Length);
byte[] bVector = new byte[16];
Array.Copy(Encoding.UTF8.GetBytes(ivVal.PadRight(bVector.Length)), bVector, bVector.Length);
byte[] original;
Rijndael aes = Rijndael.Create();
try
{
using (MemoryStream mStream = new MemoryStream(data))
{
using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateDecryptor(bKey, bVector), CryptoStreamMode.Read))
{
using (MemoryStream originalMemory = new MemoryStream())
{
byte[] buffer = new byte[1024];
int readBytes;
while ((readBytes = cStream.Read(buffer, 0, buffer.Length)) > 0)
{
originalMemory.Write(buffer, 0, readBytes);
}
original = originalMemory.ToArray();
}
}
}
}
catch
{
original = null;
}
return original;
}
#endregion
#region RSA 加密解密
//密钥对,请配合密钥生成工具使用『 http://download.csdn.net/detail/downiis6/9464639 』
private const string PublicRsaKey = @"pubKey";
private const string PrivateRsaKey = @"priKey";
/// <summary>
/// RSA 加密
/// </summary>
public static string Rsa(this string source)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(PublicRsaKey);
var cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(source), true);
return Convert.ToBase64String(cipherbytes);
}
/// <summary>
/// RSA解密
/// </summary>
public static string UnRsa(this string source)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(PrivateRsaKey);
var cipherbytes = rsa.Decrypt(Convert.FromBase64String(source), true);
return Encoding.UTF8.GetString(cipherbytes);
}
#endregion
#region DES 加密解密
/// <summary>
/// DES 加密
/// </summary>
public static string Des(this string source, string keyVal, string ivVal)
{
try
{
byte[] data = Encoding.UTF8.GetBytes(source);
var des = new DESCryptoServiceProvider { Key = Encoding.ASCII.GetBytes(keyVal.Length > 8 ? keyVal.Substring(0, 8) : keyVal), IV = Encoding.ASCII.GetBytes(ivVal.Length > 8 ? ivVal.Substring(0, 8) : ivVal) };
var desencrypt = des.CreateEncryptor();
byte[] result = desencrypt.TransformFinalBlock(data, 0, data.Length);
return BitConverter.ToString(result);
}
catch { return "转换出错!"; }
}
/// <summary>
/// DES 解密
/// </summary>
public static string UnDes(this string source, string keyVal, string ivVal)
{
try
{
string[] sInput = source.Split("-".ToCharArray());
byte[] data = new byte[sInput.Length];
for (int i = 0; i < sInput.Length; i++)
{
data[i] = byte.Parse(sInput[i], NumberStyles.HexNumber);
}
var des = new DESCryptoServiceProvider { Key = Encoding.ASCII.GetBytes(keyVal.Length > 8 ? keyVal.Substring(0, 8) : keyVal), IV = Encoding.ASCII.GetBytes(ivVal.Length > 8 ? ivVal.Substring(0, 8) : ivVal) };
var desencrypt = des.CreateDecryptor();
byte[] result = desencrypt.TransformFinalBlock(data, 0, data.Length);
return Encoding.UTF8.GetString(result);
}
catch { return "解密出错!"; }
}
#endregion
#region TripleDES 加密解密
/// <summary>
/// DES3 加密
/// </summary>
public static string Des3(this string source, string keyVal)
{
try
{
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider
{
Key = keyVal.FormatByte(Encoding.UTF8),
Mode = CipherMode.ECB,
Padding = PaddingMode.PKCS7
};
using (MemoryStream ms = new MemoryStream())
{
byte[] btArray = Encoding.UTF8.GetBytes(source);
try
{
using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(btArray, 0, btArray.Length);
cs.FlushFinalBlock();
}
return ms.ToArray().Bytes2Str();
}
catch { return source; }
}
}
catch
{
return "TripleDES加密出现错误";
}
}
/// <summary>
/// DES3 解密
/// </summary>
public static string UnDes3(this string source, string keyVal)
{
try
{
byte[] byArray = source.Str2Bytes();
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider
{
Key = keyVal.FormatByte(Encoding.UTF8),
Mode = CipherMode.ECB,
Padding = PaddingMode.PKCS7
};
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
{
cs.Write(byArray, 0, byArray.Length);
cs.FlushFinalBlock();
cs.Close();
ms.Close();
return Encoding.UTF8.GetString(ms.ToArray());
}
}
}
catch
{
return "TripleDES解密出现错误";
}
}
#endregion
#region BASE64 加密解密
/// <summary>
/// BASE64 加密
/// </summary>
/// <param name="source">待加密字段</param>
/// <returns></returns>
public static string Base64(this string source)
{
var btArray = Encoding.UTF8.GetBytes(source);
return Convert.ToBase64String(btArray, 0, btArray.Length);
}
/// <summary>
/// BASE64 解密
/// </summary>
/// <param name="source">待解密字段</param>
/// <returns></returns>
public static string UnBase64(this string source)
{
var btArray = Convert.FromBase64String(source);
return Encoding.UTF8.GetString(btArray);
}
#endregion
#region 内部方法
/// <summary>
/// 转成数组
/// </summary>
private static byte[] Str2Bytes(this string source)
{
source = source.Replace(" ", "");
byte[] buffer = new byte[source.Length / 2];
for (int i = 0; i < source.Length; i += 2) buffer[i / 2] = Convert.ToByte(source.Substring(i, 2), 16);
return buffer;
}
/// <summary>
/// 转换成字符串
/// </summary>
private static string Bytes2Str(this IEnumerable<byte> source, string formatStr = "{0:X2}")
{
StringBuilder pwd = new StringBuilder();
foreach (byte btStr in source) { pwd.AppendFormat(formatStr, btStr); }
return pwd.ToString();
}
private static byte[] FormatByte(this string strVal, Encoding encoding)
{
return encoding.GetBytes(strVal.Base64().Substring(0, 16).ToUpper());
}
/// <summary>
/// HashAlgorithm 加密统一方法
/// </summary>
private static string HashAlgorithmBase(HashAlgorithm hashAlgorithmObj, string source, Encoding encoding)
{
byte[] btStr = encoding.GetBytes(source);
byte[] hashStr = hashAlgorithmObj.ComputeHash(btStr);
return hashStr.Bytes2Str();
}
#endregion
}
}
文章浏览阅读5.3k次,点赞9次,收藏36次。一、时序数据卷积神经网络是针对二维位置相关的图片,它采取权值共享的思想,使用一个滑动的窗口去提取每一个位置相关的信息,自然界除了位置相关的信息以外,还存在另一种跟时序相关的数据类型,例如:序列信号,语音信号。对于按时间轴不停产生的信号,神经网络中,我们称其为temporal signals,而循环神经网络处理的就是拥有时序相关或者前后相关的数据类型(Sequence)。二、embeddin..._imdb数据集rnn分类案例tensorflow
文章浏览阅读852次,点赞16次,收藏19次。人生苦短,我用Python。
文章浏览阅读4.2k次,点赞6次,收藏30次。1. 基本概念图分为无向图和有向图。与一个顶点相邻接的顶点数叫做该顶点的度。在有向图中,进入一个顶点的弧叫做该顶点的入度,从一个顶点发出的弧叫做该顶点的出度。在无向图中,若图中任意一对顶点都是连通的,则称此图是连通图。在有向图中,若任意一对顶点u和v间存在一条从u到v的路径和从v到u的路径,则称此图是强连通图。无向图的一个极大连通子图称为该图的一个连通分量。有向图的一个极大强连通子..._广度优先搜索和深度优先搜索c++
文章浏览阅读613次。题目描述津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。输入格式输入包括7..._洛谷p1085c
文章浏览阅读898次。abstract (关键字)抽象['.bstr.kt]accessvt.访问,存取['.kses]'(n.入口,使用权)algorithmn.算法['.lg.riem]annotation[java]代码注释[.n.u'tei..n]anonymousadj.匿名的[.'n.nim.s]'(反义:directly adv.直接地,..._string转byte[]数组后exception in thread "main" java.lang.numberformatexcepti
文章浏览阅读2.4w次,点赞9次,收藏56次。文章目录一、sort 排序1、语法2、参数说明3、实例二、uniq 去重1、uniq使用2、sort和uniq去重结果对比三、wc 统计一、sort 排序sort命令用于 对文本文件内容,以行为单位来排序。sort命令以空格作为字段分隔符,将一行分割为多个关键字对文件进行排序。需要注意的是除非你将输出重定向到文件中,否则sort命令并不对文件内容进行实际的排序(即文件内容没有修改),只是..._sort 去重
文章浏览阅读1.3k次。Android 中的EditText最大可输入字符数可以通过xml文件中为EditText设置maxLength属性或者在代码中为EditText设置LengthFilter来设置。例如要设置EditText只能输入10个字符xml中: view plainprint?<EditText android:layout_width = "fill_parent" ..._edittext判断是否少于6位
文章浏览阅读174次。这么多攻击中,CSRF 攻击,全称是Cross Site Request Forgery,翻译过来是跨站请求伪造可谓是最防不胜防之一。比如删除一篇文章,添加一笔钱之类,如果开发者是没有考虑到会被 CSRF 攻击的,一旦被利用对公司损失很大的。低级界面如下,目的是实现修改密码低级代码如下<?phpif( isset( $_GET[ 'Change' ] ) ) { /..._dvwa cross site request forgery (csrf)
文章浏览阅读5.2k次,点赞37次,收藏45次。在idea中连接 Mysql8.0,驱动无法下载_idea下载mysql驱动包失败
文章浏览阅读577次。为了更好地管理Android应用的用户界面里的各组件,Android提供了布局管理器。通过使用布局管理器,Android应用图形用户界面具有良好的平台无关性。推荐使用布局管理器来管理组件的分布、大小,而不是直接设置组件的位置和大小。可以使用布局管理器嵌套布局管理器,即也可作为一个UI组件来使用。LinearLayout可以控制组件横向排列或者纵向排列,内容不会换行,超出屏幕部分将不会显示出来。学习..._安卓 线性调节组件
文章浏览阅读851次。struts配置文件:struts.xml "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">/login_success.jsp_struts2 防止表单重复提交 源码
文章浏览阅读1.4w次。近期调研了k8s pv和pvc相关知识,特与大家分享_创建pv,pvc日志