一、.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. nodejs+express创建一个简单的服务器

    //首先安装express //1.引入express const express = require('express'); //2.创建服务器对象 let server = express(); ...

  2. Windows系统CMD下常用命令

    命令    功能ASSOC    显示或修改文件扩展名关联.ATTRIB    显示或更改文件属性.BREAK    设置或清除扩展式 CTRL+C 检查.BCDEDIT    设置启动数据库中的属性 ...

  3. Tensorflow计算正确率、精确率、召回率

    二分类模型的评价指标 https://www.cnblogs.com/xiaoniu-666/p/10511694.html 参考tf的方法 predictions = tf.argmax(predi ...

  4. pthread mutex 进程间互斥锁实例

    共享标志 定义 名称 描述 0 PTHREAD_PROCESS_PRIVATE 进程内互斥锁 仅可当前进程内共享 1 PTHREAD_PROCESS_SHARED 进程间互斥锁 多个进程间共享 第一个 ...

  5. Win10+Ubuntu18.04双系统安装

    Win10+Ubuntu18.04 亲测UEFI启动模式双硬盘+双系统成功安装经验 https://blog.csdn.net/xrinosvip/article/details/80428133 分 ...

  6. echo 输入背景和字体常用方法

               ECHO输出背景颜色以及文字颜色输出格式:  echo -e "\033[字背景颜色;文字颜色m字符串\033[0m"例如:        echo -e & ...

  7. D. Vanya and Treasure Codeforces Round #355 (Div. 2)

    http://codeforces.com/contest/677/problem/D 建颗新树,节点元素包含r.c.dis,第i层包含拥有编号为i的钥匙的所有节点.用i-1层更新i层,逐层更新到底层 ...

  8. 【bzoj 2159】Crash 的文明世界

    Description Crash小朋友最近迷上了一款游戏——文明5(Civilization V).在这个游戏中,玩家可以建立和发展自己的国家,通过外交和别的国家交流,或是通过战争征服别的国家.现在 ...

  9. SimpleDateFormat 线程不安全及解决方案

    SimpleDateFormat定义 SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类.它允许进行格式化(日期 -> 文本).解析(文本 -> 日期 ...

  10. C语言数据类型和C#的区别