0. 背景
在前一文中有叙述了RSA加解密的Server端(一),使用C++在linux环境中实践。本文中将叙述Client Unity端中RSA加解密,使用符合(一)中图1的中通信协议。
1. 自定义密钥模块CryptModule.cs
在(一)中我们产生了公钥public.pem
和私钥private.pem
,我们将这两个文件复制到客户端StreamingAssets
路径中,并且使用:
string pub = Path.Combine(Application.streamingAssetsPath, "public.pem");
string pri = Path.Combine(Application.streamingAssetsPath, "private.pem");
表明其路径,然后通过文件路径加载公钥私钥:
CryptModule cmodule = new CryptModule();
cmodule.LoadRSAPriKey(pri);
cmodule.LoadRSAPubKey(pub);
其中CryptModule是一个关于RSA钥模块,如下图所示:
图1.RSA钥模块
它有两个RSACryptoServiceProvider
类[MSDN]实例m_oPriRsa
、m_oPubRsa
,两个加载秘钥的方法LoadRSAPriKey/LoadRSAPubKey
。
加载OpenSSL
形式的秘钥,必须使用OpenSSL的封装库,对于客户端来说,不必安装整套OpenSSL
的库来完成(当然也有客户端安装OpenSSL库流程)。在这里需要用到RSA加载秘钥的接口(PEM_read_RSA_PUBKEY(fp, &rsa,NULL, NULL)
; PEM_read_RSAPrivateKey(fp, &rsa,NULL, NUL