使用 OpenSSL 生成公私钥对,命令:

$ openssl genrsa -out rsa_1024_priv.pem$ openssl pkcs8 -topk8 -inform PEM -in rsa_1024_priv.pem -outform PEM -nocrypt -out rsa_1024_priv_pkcs8.pem$ openssl rsa -in rsa_1024_priv_pkcs8.pem -pubout -out rsa_1024_pub.peml

rsa_1024_priv_pkcs8.pemrsa_1024_pub.peml分别为公私钥对,复制出来里面的内容。

安装程序包:

install-package BouncyCastle.NetCore

创建帮助类:

public static class RSAHelper
{/// <summary>/// RSA签名/// </summary>/// <param name="content">数据</param>/// <param name="privateKey">RSA密钥</param>/// <returns></returns>public static string RsaSign(string content, string privateKey){var signer = SignerUtilities.GetSigner("SHA1withRSA");//将java格式的rsa密钥转换成.net格式var privateKeyParam = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(StrToToHexByte(privateKey));signer.Init(true, privateKeyParam);var plainBytes = Encoding.UTF8.GetBytes(content);signer.BlockUpdate(plainBytes, 0, plainBytes.Length);var signBytes = signer.GenerateSignature();return ByteToHexStr(signBytes);}/// <summary>/// RSA验签/// </summary>/// <param name="content">内容</param>/// <param name="publicKey">RSA公钥</param>/// <param name="signData">签名字段</param>/// <returns></returns>public static bool VerifySign(string content, string publicKey, string signData){try{var signer = SignerUtilities.GetSigner("SHA1withRSA");var publicKeyParam = (RsaKeyParameters)PublicKeyFactory.CreateKey(StrToToHexByte(publicKey));signer.Init(false, publicKeyParam);var signBytes = StrToToHexByte(signData);var plainBytes = Encoding.UTF8.GetBytes(content);signer.BlockUpdate(plainBytes, 0, plainBytes.Length);var ret = signer.VerifySignature(signBytes);return ret;}catch (Exception ex){return false;}}/// <summary>/// 字符串转16进制字节数组/// </summary>/// <param name="hexString"></param>/// <returns></returns>private static byte[] StrToToHexByte(string hexString){hexString = hexString.Replace(" ", "");if ((hexString.Length % 2) != 0)hexString += " ";byte[] returnBytes = new byte[hexString.Length / 2];for (int i = 0; i < returnBytes.Length; i++)returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);return returnBytes;}/// <summary>/// 字节数组转16进制字符串/// </summary>/// <param name="bytes"></param>/// <returns></returns>public static string ByteToHexStr(byte[] bytes){string returnStr = "";if (bytes != null){for (int i = 0; i < bytes.Length; i++){returnStr += bytes[i].ToString("X2");}}return returnStr;}
}

示例代码:

var content = "123";
var privateKey = RSAHelper.ByteToHexStr(Convert.FromBase64String("MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEA051JxQSrpN2cgI/fbCFjsALy7G055ichin5FF9qZ6VcdOa4/+V80FMLhR6ifRD2Sb/4qR0pMLnfkJadKBFM/QwIDAQABAkBMV3MUk6HEoXpjWwQUQ1tuVTIEH0eDA1zzVKhieaeK6Q1q4CiqJJ3fMkSTxgQZc6Wy11USJa6cRkYul4hsssddccBAiEA9Iiu7kxwbUE3DNnPzYi7st++fyo2ch9Wh2jF9BQB0YMCIQDdiXK/Y7673ucqBZdVpECJgp3DKCKlJPtfpuRmbSIvQQIhAM0IBdSclu+kbKoDvu7QpMCYRbuOA1Sw3fZvbPr4A4ZNAiBxcakpCNLrMcH+as6MNIg34oMXJL5ZAw8WdEgRi2EuAQIhALx6SB/hoTg91dGPd/Ql6pvRQaEG+HWda2yrW8fd41ot"));
var publicKey = RSAHelper.ByteToHexStr(Convert.FromBase64String("MFwwDQYJKoZIhvcNAQEBBQADSwAweniiO2ndANOdScUEq6TdnICP32whY7AC8uxtOeYnIYp+RRfamelXHTmuP/lfNBTC4Ueon0Q9km/+KkdKTC535CWnSgRTP0MCAwEAAQ=="));var signData = RSAHelper.RsaSign(content, privateKey);
var result= RSAHelper.VerifySign(content, publicKey, signData);

注:publicKeyprivateKey为 16 进制编码的公私钥对。

本文转自田园里的蟋蟀博客园博客,原文链接:http://www.cnblogs.com/xishuai/p/netcore-rsa.html,如需转载请自行联系原作者

.NET Core RSA 签名和验签(密钥为 16 进制编码)相关推荐

  1. C++ 使用OpenSSL 基于SHA1摘要的RSA签名及验签 与Java平台互通

    文章目录 准备 C++ Java RSASignature.java RSAEncrypt.java Base64.java 准备 配置OpenSSL环境 配置VS2015环境 生成公私秘钥 然后你们 ...

  2. 微信小程序-RSA签名、验签、加密、解密

    title: [小程序]RSA签名 type: categories date: 2017-05-27 17:01:15 categories: 小程序 tags: [RSA, 签名] 一个适用于微信 ...

  3. PHP实现RSA签名和验签

    <?php define('ICLOD_CERT_PATH',dirname(__FILE__).'/xx_pri.key' ); //私钥文件 define('ICLOD_CERT_PUBLI ...

  4. iOS小技能:RSA签名、验签、加密、解密的原理

    文章目录 引言 I RSA算法流程 1.1 算法原理 1.2 公钥和私钥的生成 1.3 RSA 加密 1.4 RSA 解密 1.5 RSA加密.签名区别 1.6 RSA签名的过程 II 代码实现 2. ...

  5. 使用RSA、MD5对参数生成签名与验签

    在日常的工作中,我们对外提供的接口或调用三方的接口往往有一步生成签名或验签的步骤,这个步骤主要是验证调用方是 不是合法的以及内容是否被修改.比如:对于某些网上公开下载的软件,视频,尤其是镜像文件.如果 ...

  6. 支付宝签名与验签,return_url和通知页notify_url

    1 支付宝签名与验签 签名与验签的作用 首先了解下使用RSA签名与验签的作用是什么? 对数据进行签名后,可以保证数据完整性,机密性和发送方角色的不可抵赖性,可以有效防止请求信息信息被篡改. 以商户服务 ...

  7. asp版 vbscript RSA公钥加密 / 私钥解密 / 私钥签名 / 公钥验签(支持中文)分段加密解密

    最近有空在把自己的asp站点后端函数全部整理了下,在弄RSA的时候遇到了坑了,然后找到下面这位兄弟刚好发布的文章: https://blog.csdn.net/todaygods/article/de ...

  8. 分享一个RSA加解密工具类,公钥加密私钥解密、私钥加密公钥解密、私钥签名公钥验签、生成公钥私钥

    测试: public static void main(String[] args) {try {//生成公钥私钥Map<String, Object> map = RSAUtil.ini ...

  9. ios rsa加密 java解密_iOS RSA加密与解密 签名与验签(附Java端处理)

    本篇文章将涉及以下几个操作: 1.iOS端使用RSA公钥加密,iOS端使用RSA私钥解密. 2.iOS端使用RSA私钥加签,iOS端使用RSA公钥验签. 3.iOS端使用RSA公钥加密,Java端使用 ...

最新文章

  1. 【独家】深入浅出话AI:定义和主要研究方法
  2. 启动过程以及故障排除
  3. Linux_ISCSI服务器
  4. ssh整合,明明已经导入包,却总是有很多ClassNotFoundException
  5. html整体居中文字,html文字居中 html图片居中代码
  6. 微信公众号图片转pdf
  7. 英文期刊催稿信模板_sci,催稿信,模板.docx
  8. 水晶报表加载本地图片 【BY阿泰】
  9. 一页纸项目管理pdf_项目管理,一页纸就够了
  10. 高清青龙壁纸 桌面壁纸
  11. Excel 2016图表标题不能输入中文,图表一直闪动
  12. 最好的5个电脑上的epub阅读器
  13. php 时间戳 周几,php如何根据时间戳判断周几
  14. 用XFS保护你的知识产权
  15. comsol电磁仿真入门
  16. .nii格式文件python_python处理nii格式文件
  17. 马斯克身价接近450亿美元,超过马云仍低于马化腾
  18. 拜托,学妹,别再问我怎么自学 Java 了!和盘托出
  19. Springboot: Tomcat很好我选Undertow
  20. Bundle冗余分析

热门文章

  1. 匿名管道 c++实现
  2. k8s核心技术-配置管理_ConfigMap---K8S_Google工作笔记0037
  3. 微服务升级_SpringCloud Alibaba工作笔记0015---Nacos安装
  4. Netty工作笔记0081---编解码器和处理器链梳理
  5. SpringCloud学习笔记001-SpringCloud_001_SpringCloud简介_单体架构_微服务架构_服务注册与发现_微服务调用关系
  6. 7个示例科普CPU Cache(转)
  7. printf(%d,5.01)和printf(%f,5)的输出结果
  8. 随想录(比技术更重要的是产品)
  9. python编程(supervisor程序管理)
  10. 计算机专业最新研究领,「金仕教育」打码秃头?CS计算机专业研究方向与研究领域介绍...