C#创建标准MD5WithRSA算法类库,便于PB调用MD5WithRSA签名
使用C#开发MD5WithRSA标准算法,用以其他语言调阅查看。创建类库项目后接下来需要安装Portable.BouncyCastle类库。
一、VS安装Portable.BouncyCastle的NuGet包
Portable.BouncyCastle包以来于.NET Framework 4.0 或 .NET Standard 2.0
二、设置类库项目-使程序集COM课件
C#开发的类库需要注册为com类型,才可被其他程序所调阅使用,需要注册为COM
三、C#实现代码
using System; using System.Text; using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Security; namespace AESorDES { public class md5withRsa { public Encoding encoding = Encoding.GetEncoding("GBK"); public string SignerSymbol = "MD5withRSA"; public md5withRsa() { } public md5withRsa(Encoding e, string s) { encoding = e; SignerSymbol = s; } private AsymmetricKeyParameter CreateKEY(bool isPrivate, string key) { byte[] keyInfoByte = Convert.FromBase64String(key); if (isPrivate) return PrivateKeyFactory.CreateKey(keyInfoByte); else return PublicKeyFactory.CreateKey(keyInfoByte); } /// <summary> /// 数据签名 /// </summary> /// <param name="content">待加密字符串</param> /// <param name="privatekey">私钥</param> /// <returns>加密后字符串</returns> public string SignMD5withRsa(string content, string privatekey) { ISigner sig = SignerUtilities.GetSigner(SignerSymbol); sig.Init(true, CreateKEY(true, privatekey)); var bytes = encoding.GetBytes(content); sig.BlockUpdate(bytes, 0, bytes.Length); byte[] signature = sig.GenerateSignature(); //使用Base64转换sig,8-bit var signedString = Convert.ToBase64String(signature); return signedString; } /// <summary> /// 验证签名 /// </summary> /// <param name="content">待签名的字符串</param> /// <param name="signData">加密后的文本</param> /// <param name="publickey">公钥文本</param> /// <returns>是否一致</returns> public bool VerifyMD5withRsa(string content, string signData, string publickey) { ISigner signer = SignerUtilities.GetSigner(SignerSymbol); signer.Init(false, CreateKEY(false, publickey)); var expectedSig = Convert.FromBase64String(signData); var msgBytes = encoding.GetBytes(content); signer.BlockUpdate(msgBytes, 0, msgBytes.Length); return signer.VerifySignature(expectedSig); } } }
生成的类库文件需要注册,Portable.BouncyCastle类库也需要同步拷贝到程序根目录
四、类库的注册
使用管理员打开CMD命令行窗口,执行下述语句
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\regasm E:\PB9soft\AESorDES\AESorDES.dll /tlb:E:\PB9soft\AESorDES\AESorDES.tlb /codebase
E:\PB9soft\AESorDES 是程序的目录,也可以是电脑上任意目录,确保文件存在即可。
五、PB调用的方式
//创建OLEObject对象 OLEObject OLEObject OLEObject = Create OLEObject //判定类库方法是否有效引入 long li_status string ls_str //创建连接,此处格式为“命名空间名.方法名”,li_status一般为引入错误或未注册类库 li_status= OLEObject.ConnectToNewObject("AESorDES.md5withRsa") //根据状态 if li_status = 0 then //调用方法内的公共函数 //数据签名,返回值为字符串 ls_str = OLEObject.AEScriptMD5withRsa(sle_1.text,mle_3.text) //数据验签,返回值bool类型 if OLEObject.VerifyMD5withRsa(sle_1.text,mle_1.text,mle_3.text) then messagebox('提示','签名验证成功!') end if end if //释放资源 OLEObject.DisConnectObject()
附件: