一、.Net加签与验签。经过测试,发现使用同一套私钥和公钥,JAVA和.Net可以实现互通

1.1 私钥加签 公钥验签

        public void Encode()
{
try
{
var path = AppDomain.CurrentDomain.BaseDirectory + "../../ADFS/donghuangtaiyi.pfx"; X509Certificate2 cert = new X509Certificate2(path, "xxxxx", X509KeyStorageFlags.Exportable);
var privateKey = cert.PrivateKey.ToXmlString(true); var bt = Encoding.UTF8.GetBytes(data);
var rsaProvider = new RSACryptoServiceProvider();
rsaProvider.FromXmlString(privateKey);
byte[] inArray = rsaProvider.SignData(bt, CryptoConfig.MapNameToOID("SHA384"));
var result = Convert.ToBase64String(inArray);
}
catch (Exception)
{
throw;
}
}

1.2验签

public void Decode()
{
try
{ var path = AppDomain.CurrentDomain.BaseDirectory + "../../ADFS/dongsheng.crt";
var publicCert = new X509Certificate2(path);
var publicKey = publicCert.PublicKey.Key.ToXmlString(false); var rsaProvider = new RSACryptoServiceProvider();
rsaProvider.FromXmlString(publicKey);
var signatureData = Encoding.UTF8.GetBytes(data);
var result = rsaProvider.VerifyData(signatureData, CryptoConfig.MapNameToOID("SHA256"), Convert.FromBase64String(SignatureData)); }
catch (Exception ex)
{ throw;
}
}

二、实现私钥和公钥,.Net与Java转换。java和.Net秘钥格式不一样,.Net是xml格式,Java是字符串格式。

引用 BouncyCastle.dll类库

2.1 加签,这个加签结果和1.1的加签结果是一样的

public string EncodeJava()
{
try
{
var path = AppDomain.CurrentDomain.BaseDirectory + "../../ADFS/donghuangtaiyi.pfx"; X509Certificate2 cert = new X509Certificate2(path, "", X509KeyStorageFlags.Exportable);
var privateKey = cert.PrivateKey.ToXmlString(true);
var javaPrivateKey = DoNet2JavaForKey.RSAPrivateKeyDotNet2Java(privateKey); RsaKeyParameters privateKeyParam = (RsaKeyParameters)PrivateKeyFactory.CreateKey(Convert.FromBase64String(javaPrivateKey));
ISigner signer = SignerUtilities.GetSigner("SHA384WithRSA");
signer.Init(true, privateKeyParam);
var dataByte = Encoding.UTF8.GetBytes(data);
signer.BlockUpdate(dataByte, , dataByte.Length);
var result = Convert.ToBase64String(signer.GenerateSignature());
return result;
}
catch (Exception ex)
{ return "";
}
}

2.1解签


  public void DecodeJava()
{
try
{
var data="12312ewrwe你好"; var path = AppDomain.CurrentDomain.BaseDirectory + "../../ADFS/dongsheng.crt";
var publicCert = new X509Certificate2(path);
var publicKey = publicCert.PublicKey.Key.ToXmlString(false);
var publicKeyJava = DoNet2JavaForKey.RSAPublicKeyDotNet2Java(publicKey); string hashAlgorithm = "SHA256WithRSA"; RsaKeyParameters publicKeyParam = (RsaKeyParameters)PublicKeyFactory.CreateKey(Convert.FromBase64String(publicKeyJava)); ISigner signer = SignerUtilities.GetSigner(hashAlgorithm);
//参数为false验签,参数为true加签
signer.Init(false, publicKeyParam);
byte[] dataByte = Encoding.UTF8.GetBytes(data);
signer.BlockUpdate(dataByte, , dataByte.Length); byte[] signatureByte = Convert.FromBase64String(SignatureData);
var result = signer.VerifySignature(signatureByte); }
catch (Exception ex)
{ throw;
}
}

.Net 操作证书文件的更多相关文章

  1. 使用X509Certificate2类操作证书文件

    public class CertHelper { string pfxPath = @"E:\开发辅助项目\cert\taisuyuanqing.pfx"; string cer ...

  2. day4-基础 字符串操作,文件操作,字符转编码

    1.字符串用法 name = 'daniel' print(name.capitalize()) #首字母大写 >>>daniel print(name.count('a')) #统 ...

  3. 利用keytool、openssl生成证书文件

    转载请标明出处:http://blog.csdn.net/shensky711/article/details/52225073 本文出自: [HansChen的博客] 用openssl指令逐步生成各 ...

  4. Asp.Net 操作XML文件的增删改查 利用GridView

    不废话,直接上如何利用Asp.NET操作XML文件,并对其属性进行修改,刚开始的时候,是打算使用JS来控制生成XML文件的,但是最后却是无法创建文件,读取文件则没有使用了 index.aspx 文件 ...

  5. php多线程操作同一文件-待续

    同意文件操作同意文件的问题在于逻辑有些地方不合适,如果多个线程同时写入,在不加锁的情况下,可能导致得到结果不如意,为了安全,和脏读(数据库的词),应该使用排他锁,这就意味着每次只能被一个线程操作.其他 ...

  6. Java生成和操作Excel文件(转载)

    Java生成和操作Excel文件   JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该A ...

  7. .NET相关操作其他文件的小程序(系列文章)

    平时自诩为使用.NET做开发,但是实际上从一开始学习C#直到现在除了做个几个不登大雅之堂的小网站,做过几个winform程序和几个控制台应用程序,真的没有踏踏实实地用.NET开发过某些属于自己的东西. ...

  8. Maven 打包涉及证书文件问题

    当使用maven-assembly-plugin或者maven-shade-plugin打包时,如果涉及到证书文件,一定设置过滤,否则证书文件会被做修改.报异常: java.io.IOExceptio ...

  9. Java生成和操作Excel文件

    JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...

随机推荐

  1. 微信退款验证证书时报错:length too long

    由于springboot文件加载时,默认会加载resources目录下的文件,而微信的证书刚好在它之下,加载时就会报这个错误.解决办法: 在pom.xml文件中,添加如下代码: <plugin& ...

  2. Linux 下 fcitx 崩溃

    killall fcitx killall sogou-qimpanel fcitx & 输入以上命令

  3. Hackers' Crackdown UVA - 11825 (状压dp)

    给出n个电脑,每个电脑连着n个服务,然后每个电脑都连着m个邻电脑,如果当前的电脑某个服务被断开了,相邻的电脑的服务也会被断开,每个电脑都只能操作一次,问你最多可以让多少种服务被断开.一种服务被断开的条 ...

  4. x86汇编语言实践(3)

    0 写在前面 为了更深入的了解程序的实现原理,近期我学习了IBM-PC相关原理,并手工编写了一些x86汇编程序. 在2017年的计算机组成原理中,曾对MIPS体系结构及其汇编语言有过一定的了解,考虑到 ...

  5. C++:普通变量C++命名规则

    C++提倡使用拥有一定意义的变量名,使程序代码更有阅读性,命名是必须使用的几种简单的C++命名规则: 命名时只能使用:字母字符.数字和下划线(_); 第一个字符不能是数字: 区分大小写(C++对大小写 ...

  6. 论decltype和auto的区别

    论decltype和auto的区别   decltype和auto的区别 ①对引用变量的不同之处:auto将引用变量赋给变量后,变量的类型为引用变量所对应的变量的类型.而decltype则是为引用类型 ...

  7. 编写高质量的Python代码系列(六)之内置模块

    Python预装了许多写程序时会用到的重要模块.这些标准软件包与通常意义上的Python语言联系得非常精密,我们可以将其当成语言规范的一部分.本节将会讲解基本的内置模块. 第四十二条:用functoo ...

  8. OA系统开发人事模块关于请假跨月的处理

    前言:其实对于跨月的数据单独处理是不难的,但是对于后台显示页面,肯定不是单纯拼接一个where条件的,因此在我的项目也是如此,并不能够用普遍的方法来处理,此时就想尽量用简单的方法来处理跨月数据的准确性 ...

  9. $refs的用法及作用

    获取DOM元素,一般用document.querySelector获取这个dom节点,然后在获取input的值 但是用ref绑定之后,就不需要在获取dom节点了,直接在上面的input上绑定input ...

  10. docker 基础知识分享ppt

    给团队做的docker基础分享ppt, 见下面的附件. https://files.cnblogs.com/files/harrychinese/docker_intro.pptx