http://www.bouncycastle.org/csharp/index.html
下载bin的zip文件。
工程添加引用“BouncyCastle.Crypto.dll”
代码添加引用:
using Org.BouncyCastle.Pkcs;
using Org.BouncyCastle.X509;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.Crypto.Parameters;
签名&读证书序列号:
FileStream fileStream = null;
try
{
fileStream = new FileStream(certPath, FileMode.Open);
Pkcs12Store store = new Pkcs12Store(fileStream, certPwd.ToCharArray());
string pName = null;
foreach (string n in store.Aliases)
{
if (store.IsKeyEntry(n))
{
pName = n;
//break;
}
}
Cert signCert = new Cert();
AsymmetricKeyParameter key = store.GetKey(pName).Key;
X509CertificateEntry[] chain = store.GetCertificateChain(pName);
X509Certificate cert = chain[0].Certificate;
string certId = cert.SerialNumber.ToString(); //证书序列号
ISigner normalSig = SignerUtilities.GetSigner("SHA1WithRSA");
normalSig.Init(true, key);
normalSig.BlockUpdate(data, 0, data.Length);
byte[] normalResult = normalSig.GenerateSignature(); //签名结果
}
finally
{
if (fileStream != null)
fileStream.Close();
}
验签&读证书序列号:
FileStream fileStream = null;
try
{
fileStream = new FileStream(file.DirectoryName + "\\" + file.Name, FileMode.Open);
X509Certificate certificate = new X509CertificateParser().ReadCertificate(fileStream);
string certId = certificate.SerialNumber.ToString(); //证书序列号
AsymmetricKeyParameter key = certificate.GetPublicKey();
ISigner verifier = SignerUtilities.GetSigner("SHA1WithRSA");
verifier.Init(false, key);
verifier.BlockUpdate(srcByte, 0, srcByte.Length);
return verifier.VerifySignature(signature); //验签结果
}
finally
{
if(fileStream != null)
fileStream.Close();
}
加密:
FileStream fileStream = null;
try
{
fileStream = new FileStream(file.DirectoryName + "\\" + file.Name, FileMode.Open);
X509Certificate certificate = new X509CertificateParser().ReadCertificate(fileStream);
string certId = certificate.SerialNumber.ToString(); //证书序列号
AsymmetricKeyParameter key = certificate.GetPublicKey();
IBufferedCipher c = CipherUtilities.GetCipher("RSA/NONE/PKCS1Padding");
c.Init(true, new ParametersWithRandom(key, new SecureRandom()));
return c.DoFinal(dataToBeEnc); //加密结果
}
finally
{
if(fileStream != null)
fileStream.Close();
}
文章浏览阅读5.4k次,点赞4次,收藏2次。刚开始学习vue,跟着教程一步一步的自己敲代码,发现了如下错误:Extra space after key ‘template’其实错误中已经给出提示key-spacing,一开始并未注意,经多番尝试,发现template后面多了一个空格本人初学菜鸟,不知道为何校验如此沿革,冒号前不能有空格,冒号后必须有空格,待日后深入研究!..._extra space after key
文章浏览阅读4.2k次。Maxwell:异构数据源实时同步工具文章目录Maxwell:异构数据源实时同步工具1、概述2、原理解析2.1 Mysql主从复制3、Maxwell安装部署4、增量数据同步5、历史数据全量同步5.1 Maxwell-bootstrap1、概述 Maxwell:实时监控Mysql数据库的数据变更操作(包括insert、update、delete),并将变更数据以 JSON 格式发送给 Kafka、Kinesi等流数据处理平台。 Maxwell的工作原理是实时读取MySQL数据库的二进制日志(B_maxwell oracle
文章浏览阅读1k次。ThingsBoard是一个开源物联网平台,可实现物联网项目的快速开发、管理和扩展,你可以在任何地方进行部署并且对个人和商业用户均可以免费使用。_thingsboard是干嘛的
文章浏览阅读3.8k次。前言最近开始认真掌握VS的各种操作,自然而然避不开dll和lib的使用,自己逛了逛CSDN和博客园,看了很多博客,但是并不是很让我满意,一方面是大多不符合我的环境(VS2017 Community),另一方面是太他妈复杂了,什么建成后又各种添加什么的,实在记不熟,所以以下是我的操作。说明如下:环境:VS2017 Community操作:同一个结局解决方案下一个exe项目,一个dll项目,一..._vsllb
文章浏览阅读1.6k次,点赞5次,收藏4次。文章目录MSYS2 更换国内源MSYS2 更换国内源使用默认的 MSYS2 源升级软件或是安装新软件的特别的慢。所以就翻了翻国内的几个开源软件的镜像库,发现中科大的库里就有 MSYS2。所以就研究了一下,给 MSYS2 添加了中科大的源。简单的说 msys64\etc\pacman.d 目录下有三个文件。mirrorlist.msysmirrorlist.mingw64mirrorlist.mingw32这三个文件记录了都有哪些源。下面把我添加之后的文件内容贴上来。首先是 mirrorlis_msys2 mingw 64-bit替换源
文章浏览阅读1.4k次。一,代码及其设置#include <stdio.h>int fputc(int ch, FILE *f)//Stm8005 重定向{ while (!(UART2->SR&0x80)); UART2->DR=ch; return ch;}同时需要修改IAR的Projec t- >Options -> General..._error[li009]: runtime model conflict: module xxexit.o(dbgstm8smn.a) specifie
文章浏览阅读418次。app:navigationIcon是用来设置图标,我们一般是弄一个返回箭头。DarkActionBar我们一般修改为NoActionBar,自己设置。android:gravity="center"这个是设置不了的,要用。为什么我们要用toolbar就是因为我们可以能灵活的使用。也可以通过java的方式设置。_androidx.appcompat.widget.toolbar
文章浏览阅读3.8k次,点赞2次,收藏3次。利用python写的猜随机数游戏_python猜随机数
文章浏览阅读8.2k次。不想word、excel一打开网络文件、不安全位置的文件、Outlook附件就提示“启用编辑”,只需将如下位置的勾选去掉即可!_word打开每次都要点启用编辑
文章浏览阅读86次。@echo offclsset CLASSPATH=..\api\jogre.jarset CLASSPATH=%CLASSPATH%;.set CLASSPATH=%CLASSPATH%;classesset CLASSPATH=%CLASSPATH%;lib\dom4j.jarjava org.jogre.server.JogreServer建表create database con_test..._mysql批量写入记录的代码
文章浏览阅读5.7k次,点赞21次,收藏55次。文章目录一、实现方法二、代码运行结果一、实现方法自适应中值滤波算法有两个处理层次:**层次A:**若zmin<zmed<zmax,则转移到层次B;否则,增Sxy尺 寸,若Sxy<Smax,则重复层次A;否则,输出zmed。**层次B:**若zmin<zxy<zmax,则输出zxy;否则,输出zmed。既然是中值滤波,那处理椒盐这类冲激噪声肯定比较合适,自适应中值滤波能在有效去除冲激噪声的基础上,平滑其他非冲激噪声,减少失真,保留图像细节,而对于同等大小的中_图像滤波 椒盐噪声 自适应中值滤波
文章浏览阅读3.5k次。统一过程(RUP/UP,Rational Unified Process)是一种以用例驱动、以体系结构为核心、迭代及增量的软件过程模型,由UML方法和工具支持,广泛应用于各类面向对象项目。RUP是由Rational公司开发并维护,和一系列软件开发工具紧密集成。RUP蕴含了大量优秀的实践方法,如:迭代式软件开发、需求管理、基于构件的构架应用、建立可视化的软件模型、软件质量验证、软件变更控制等。..._统一过程模型