using System;
using System.IO;
using System.Text;
using System.Collections.Generic;
using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography; namespace VWFC.IT.CUP.BLL.Common
{
/// <summary>
/// web tools
/// </summary>
public sealed class WebUtils
{
#region Get Private Key
/// <summary>
/// Get Private Key
/// </summary>
/// <param name="path">pfx path</param>
/// <param name="password">Private key password</param>
/// <returns></returns>
static public string GetPrivateKey(string path, string password)
{
try
{
X509Certificate2 cert = new X509Certificate2(path, password, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet);
return cert.PrivateKey.ToXmlString(true);
}
catch
{
return string.Empty;
}
}
#endregion #region Get Public Key
/// <summary>
/// Get Public Key
/// </summary>
/// <param name="path">pfx path</param>
/// <param name="password">Private key password</param>
/// <returns></returns>
static public string GetPublicKey(string path, string password)
{
try
{
X509Certificate2 cert = new X509Certificate2(path, password, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet);
return cert.PublicKey.Key.ToXmlString(false);
}
catch
{
return string.Empty;
}
}
#endregion #region Get SHA512 Hash From String
/// <summary>
/// Get SHA512 Hash From String
/// </summary>
/// <param name="originalData"></param>
/// <returns></returns>
static public string GetHash512String(string originalData)
{
string result = string.Empty;
byte[] bytValue = Encoding.UTF8.GetBytes(originalData);
SHA512 sha512 = new SHA512CryptoServiceProvider();
byte[] retVal = sha512.ComputeHash(bytValue);
StringBuilder sb = new StringBuilder();
for (int i = ; i < retVal.Length; i++)
{
sb.Append(retVal[i].ToString("x2"));
}
result = sb.ToString();
return result;
} /// <summary>
/// Get SHA512 Hash From String
/// </summary>
/// <param name="originalData"></param>
/// <returns></returns>
static public string GetSHA512HashFromString2(string originalData)
{
string result = string.Empty;
byte[] buffer = Encoding.UTF8.GetBytes(originalData);
SHA512CryptoServiceProvider SHA512 = new SHA512CryptoServiceProvider();
byte[] h5 = SHA512.ComputeHash(buffer);
result = BitConverter.ToString(h5).Replace("-", string.Empty);
result = result.ToLower();
return result;
}
#endregion #region Get the value of the key from the key file
/// <summary>
/// Get the value of the key from the key file
/// </summary>
/// <param name="type">RSA PRIVATE KEY/RSA PUBLIC KEY</param>
/// <param name="pemUrl">url of the key file</param>
/// <returns>base64 string</returns>
static public string GetKeyFromPem(string type, string pemUrl)
{
string base64 = string.Empty;
try
{
using (FileStream fs = File.OpenRead(pemUrl))
{
byte[] data1 = new byte[fs.Length];
fs.Read(data1, , data1.Length);
string pem = Encoding.UTF8.GetString(data1);
string header = String.Format("-----BEGIN {0}-----\r\n", type);
string footer = String.Format("-----END {0}-----", type);
int start = pem.IndexOf(header) + header.Length;
int end = pem.IndexOf(footer, start);
base64 = pem.Substring(start, (end - start));
}
}
catch { }
return base64;
}
#endregion #region Parse Dictionary #region Dictionary Parse To String
/// <summary>
/// Dictionary Parse To String
/// </summary>
/// <param name="parameters">Dictionary</param>
/// <returns>String</returns>
static public string ParseToString(IDictionary<string, string> parameters)
{
IDictionary<string, string> sortedParams = new SortedDictionary<string, string>(parameters);
IEnumerator<KeyValuePair<string, string>> dem = sortedParams.GetEnumerator(); StringBuilder query = new StringBuilder("");
while (dem.MoveNext())
{
string key = dem.Current.Key;
string value = dem.Current.Value;
if (!string.IsNullOrEmpty(key) && !string.IsNullOrEmpty(value))
{
query.Append(key).Append("=").Append(value).Append("&");
}
}
string content = query.ToString().Substring(, query.Length - ); return content;
}
#endregion #region String Parse To Dictionary
/// <summary>
/// String Parse To Dictionary
/// </summary>
/// <param name="parameter">String</param>
/// <returns>Dictionary</returns>
static public Dictionary<string, string> ParseToDictionary(string parameter)
{
try
{
String[] dataArry = parameter.Split('&');
Dictionary<string, string> dataDic = new Dictionary<string, string>();
for (int i = ; i <= dataArry.Length - ; i++)
{
String dataParm = dataArry[i];
int dIndex = dataParm.IndexOf("=");
if (dIndex != -)
{
String key = dataParm.Substring(, dIndex);
String value = dataParm.Substring(dIndex + , dataParm.Length - dIndex - );
dataDic.Add(key, value);
}
} return dataDic;
}
catch
{
return null;
}
}
#endregion #endregion #region Base64 encryption and decryption /// <summary>
/// 服务器端Base64编码
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
static public string Base64Encode(string data)
{
string result = data;
try
{
byte[] encData_byte = Encoding.UTF8.GetBytes(data);
result = Convert.ToBase64String(encData_byte);
}
catch { } return result;
} /// <summary>
/// 服务器端Base64解码
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
static public string Base64Decode(string data)
{
string result = data;
string decode = string.Empty;
//try
//{
// byte[] bytes = Convert.FromBase64String(result);
// decode = Encoding.UTF8.GetString(bytes);
//}
//catch { }
try
{
UTF8Encoding encoder = new UTF8Encoding();
Decoder utf8Decode = encoder.GetDecoder();
byte[] todecode_byte = Convert.FromBase64String(data);
int charCount = utf8Decode.GetCharCount(todecode_byte, , todecode_byte.Length);
char[] decoded_char = new char[charCount];
utf8Decode.GetChars(todecode_byte, , todecode_byte.Length, decoded_char, );
result = new String(decoded_char);
}
catch { } return result;
} #endregion #region Assign parameters to specified objects /// <summary>
/// Assign parameters to specified objects
/// </summary>
/// <typeparam name="T">object type</typeparam>
/// <param name="dic">Fields/values</param>
/// <returns></returns>
static public T Assign<T>(Dictionary<string, string> dic) where T : new()
{
Type myType = typeof(T);
T entity = new T();
var fields = myType.GetProperties();
string val = string.Empty;
object obj = null; foreach (var field in fields)
{
if (!dic.ContainsKey(field.Name))
continue;
val = dic[field.Name]; object defaultVal;
if (field.PropertyType.Name.Equals("String"))
defaultVal = "";
else if (field.PropertyType.Name.Equals("Boolean"))
{
defaultVal = false;
val = (val.Equals("") || val.Equals("on")).ToString();
}
else if (field.PropertyType.Name.Equals("Decimal"))
defaultVal = 0M;
else
defaultVal = ; if (!field.PropertyType.IsGenericType)
obj = string.IsNullOrEmpty(val) ? defaultVal : Convert.ChangeType(val, field.PropertyType);
else
{
Type genericTypeDefinition = field.PropertyType.GetGenericTypeDefinition();
if (genericTypeDefinition == typeof(Nullable<>))
obj = string.IsNullOrEmpty(val) ? defaultVal : Convert.ChangeType(val, Nullable.GetUnderlyingType(field.PropertyType));
} field.SetValue(entity, obj, null);
} return entity;
} #endregion }
}

调用

            //string publickKeyCer = Path.Combine(baseDirectory, AppConfig.GetPublicKeyCer);
//publicKey = WebUtils.GetKeyFromPem("CERTIFICATE", publickKeyCer); //privateKey = WebUtils.GetPrivateKey(fileKeyUrl, AppConfig.GetPrivateKeyPassword);

C#签名验签帮助类的更多相关文章

  1. Java 签名验签工具类

    public class SignatureUtil { private static final String CHARSET = "UTF-8"; private static ...

  2. RSA签名验签

    import android.util.Base64; import java.security.KeyFactory; import java.security.PrivateKey; import ...

  3. 利用SHA-1算法和RSA秘钥进行签名验签(带注释)

    背景介绍 1.SHA 安全散列算法SHA (Secure Hash Algorithm)是美国国家标准和技术局发布的国家标准FIPS PUB 180-1,一般称为SHA-1.其对长度不超过264二进制 ...

  4. RSA密钥生成、加密解密、签名验签

    RSA 非对称加密公钥加密,私钥解密 私钥签名,公钥验签 下面是生成随机密钥对: //随机生成密钥对 KeyPairGenerator keyPairGen = null; try { keyPair ...

  5. .net 实现签名验签

    本人被要求实现.net的签名验签,还是个.net菜鸡,来分享下采坑过程 依然,签名验签使用的证书格式依然是pem,有关使用openssl将.p12和der转pem的命令请转到php实现签名验签 .ne ...

  6. C# RSACryptoServiceProvider加密解密签名验签和DESCryptoServic

    C#在using System.Security.Cryptography下有 DESCryptoServiceProvider RSACryptoServiceProvider DESCryptoS ...

  7. RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密

    原文:RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密 C#在using System.Security.Cryptograph ...

  8. 数据安全管理:RSA加密算法,签名验签流程详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.RSA算法简介 1.加密解密 RSA加密是一种非对称加密,在公开密钥加密和电子商业中RSA被广泛使用.可以在不直接传递密钥的情况下,完成加 ...

  9. js rsa sign使用笔记(加密,解密,签名,验签)

    你将会收获: js如何加密, 解密 js如何签名, 验签 js和Java交互如何相互解密, 验签(重点) 通过谷歌, 发现jsrsasign库使用者较多. 查看api发现这个库功能很健全. 本文使用方 ...

随机推荐

  1. python中的匿名函数

    python 使用 lambda 来创建匿名函数. 所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数. lambda 只是一个表达式,函数体比 def 简单很多. lambda的主体是一 ...

  2. ORM SQLAlchemy 表于表的关系

    1表与表之间三种关系 1.1 一对一关系 举例: 一个丈夫对应一个妻子,一个妻子对应一个丈夫 1.2 一对多关系 举例:一个人可以拥有多辆汽车,要求查询某个人拥有的所有车辆 分析:这种情况其实也可以采 ...

  3. spring boot 原理解析一(spring boot 基础特征)

    spring boot 提供了完整的介绍 文档:https://docs.spring.io/spring-boot/docs/2.2.2.RELEASE/reference/html/documen ...

  4. 五子棋AI教程

    https://github.com/Chuck-Ai/gobang 我写了非常详细的中文教程,教你如何一步步编写自己的五子棋AI: 五子棋AI设计教程第二版一:前言 五子棋AI设计教程第二版二:博弈 ...

  5. 《你不知道的JavaScript(上)》笔记——函数作用域和块作用域

    关于函数声明:如果 function 是声明中的第一个词, 那么就是一个函数声明, 否则就是一个函数表达式.例如匿名函数这种形式,函数会被当作函数表达式而不是一个标准的函数声明来处理. (functi ...

  6. LayerDrawable

    层图形对象,包含一个Drawable数组,然后按照数组对应的顺序来绘制他们,索引 值最大的Drawable会被绘制在最上层!虽然这些Drawable会有交叉或者重叠的区域,但 他们位于不同的层,所以并 ...

  7. Onvif协议及其在Android下的实现

    好久没有写博客,今天将前段时间做的Onvif协议在Android上的实现分享给大家. 首先,我们先来了解一下什么是Onvif协议:ONVIF 协议是由Open Network Video Interf ...

  8. Build Telemetry for Distributed Services之OpenTracing简介

    官网地址:https://opentracing.io/ What is Distributed Tracing? Who Uses Distributed Tracing? What is Open ...

  9. shell脚本中用到的计算

    在shell脚本中计算一般会涉及到let.$(()).$[].bc(另扩展expr).其中let.$(()).$[]都是用来做基本整数运算,bc可以用来做浮点运算. (1).let.$(()).$[] ...

  10. django项目添加路由----返回给客户端内容-----windows中的python

    django项目添加路由 url函数的第一个参数是匹配url路径的正则表达式,第2个参数是路由函数 第一个正则表达式是r'^$',其中r表示正则表达式字符串不对转义符进行转义.“^”表示匹配URL路径 ...