一、.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. POJ1988 Cube stacking(非递归)

    n有N(N<=30,000)堆方块,开始每堆都是一个方块.方块编号1 – N. 有两种操作: nM x y : 表示把方块x所在的堆,拿起来叠放到y所在的堆上. nC x : 问方块x下面有多少 ...

  2. [RPM,YUM]RHEL Centos mount local source / RHEL CentOS挂载本地源

    RHEL: 使用YUM安装Oracle必要软件包,将操作系统ISO文件“rhel-server-6.5-x86_64.iso”分别上传至两个节点主机“/root”目录,以root用户登录,执行以下命令 ...

  3. 移动端适配单位rem

    0 写在前面 本周惊喜地发现,其他各个老师的软工班(罗杰老师班和欧阳老师班)的软工项目的alpha版本都已经发布了!(然而我们软工项目还没开始写代码…逃…) 十分好奇的我第一时间下载了一些他们的产品进 ...

  4. Vue针对性笔记

    Github原文阅读 MVVM(Model-View-ViewModel)模型 MVVM分为Model.View.ViewModel三部分. Model代表数据模型,定义数据和业务逻辑,访问数据层 V ...

  5. linux 常用命令集锦

    喝断片儿了,我是谁?我在什么地方?我做过些什么事?查看当前用户 who am i查看当前路径 pwd查看历史记录 history 我忘了程序放哪了,就记得个名.更新系统数据库 updatedb查找文件 ...

  6. git最基础操作一

    1. 从远端克隆:git clone -b 克隆的分支 git的地址( eg:git clone -b master https://gitee.com/test/test.git ) 2.提交修改的 ...

  7. TF用法指导

    一.变量 1 .tf.Variables() 功能:创建变量 2.tf.get_variable() 功能:创建变量,注意和上面的区别 3.tf.variable_scope() 功能:其实只要记住一 ...

  8. .NET框架 - NETCORE部署IIS

    .NET框架 - NETCORE部署IIS 1. 发布NETCORE项目. 2. 发布IIS 添加 网站 修改对应的程序池 为 ”无托管代码“. 3. 浏览网站. IIS 需提前安装好 .netcor ...

  9. 自定义 ThreadPoolExecutor 处理线程运行时异常

    自定义 ThreadPoolExecutor 处理线程运行时异常 最近看完了ElasticSearch线程池模块的源码,感触颇深,然后也自不量力地借鉴ES的 EsThreadPoolExecutor ...

  10. table自适应大小,以及内容换行

    在table的样式中加入以下两个样式: table-layout: fixed; word-wrap:break-word;