<方案1:基於加密算法自己的實現>java
適合一部分有很強的算法能力積累的同窗,固然網上也有一些分享,但確定不全面或者說沒有後續解答或支持。 話說也沒有想象得複雜,由於存在一些操做系統內置的組件,例如:openssl, 各類語言基本均可以實現符合openssl算法規範的處理。android
<方案2:藉助js的實現>ios
相似c#,java,android,dephi, ios中的object-c等都提供執行js腳本的內置函數。 所以只要引用網上已實現des,aes,ras等算法的js類便可。 舉個例子,windows上c#和vb均可以使用msscript.ocx,msscript.dll這些組件。 c++
<方案3:基於c/c++導出共享類庫,讓其它語言進行引用>算法
使用c/c++開發封裝加密算法,並導出供外部調用的接口。 例如封裝爲.dll,lib,.so等以後, 其它語言 : c# ,java,android,dephi,vb都能調用。 c#
>開發c++共享連接庫.windows
>>vs2017下建立動態連接庫(dll)項目.函數
>>項目屬性配置.工具
注:根據項目引用的第三方庫的不一樣,配置方法略有不一樣,有些須要配置庫目錄,包含目錄,還有些須要設置編碼,平臺版本,編譯與處理配置等。測試
>>.加密算法函數的開發(.h,.cpp).
>> 聲明與導出接口(告訴外部調用本dll的數據類型及規則等).
>外部調用的示例.
>>c++的調用ConfigLab.Cpp.Comp.dll的示例.
步驟1:定義一個函數類型.
char* sReaultOfEncryptByPublicKey = proc_RSAEncryptByPubKey("123456", "公鑰"); char* sReaultOfDecryptByPriKey = proc_RSADecryptByPriKey(sReaultOfEncryptByPublicKey, "私鑰");
步驟2: 加載共享連接庫。
HMODULE dllModule = LoadLibrary(L"ConfigLab.Cpp.Comp.dll");//x86,x64測試經過, if (dllModule == NULL) { printf("ConfigLab.Cpp.Comp.dll NOT found!.\n"); return; }
步驟3: 獲取連接庫中的函數地址.
RSAEncryptByPubKey proc_RSAEncryptByPubKey = (RSAEncryptByPubKey)GetProcAddress(dllModule, "RSAEncryptByPublicKey"); RSADecryptByPriKey proc_RSADecryptByPriKey= (RSADecryptByPriKey)GetProcAddress(dllModule, "RSADecryptByPrivateKey");
步驟4: 調用.
char* sReaultOfEncryptByPublicKey = proc_RSAEncryptByPubKey("123456", "公鑰"); char* sReaultOfDecryptByPriKey = proc_RSADecryptByPriKey(sReaultOfEncryptByPublicKey, "私鑰");
>>c#的調用ConfigLab.Cpp.Comp.dll的示例(彩蛋:windows下.net framework和.net core 均可以測試經過).
步驟1:聲明.
[DllImport(@"ConfigLab.Cpp.Comp.dll", EntryPoint = "RSAEncryptByPublicKey", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall, ExactSpelling = false)]//發現.netcore中AnyCpu下用CallingConvention = CallingConvention.Cdecl,而在 .net framework的x86下必須用CallingConvention.StdCall public static extern IntPtr RSAEncryptByPublicKey(string content, string sPubKey); [DllImport(@"ConfigLab.Cpp.Comp.dll", EntryPoint = "RSADecryptByPrivateKey", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall, ExactSpelling = false)]//發現.netcore中AnyCpu下用CallingConvention = CallingConvention.Cdecl,而在 .net framework的x86下必須用CallingConvention.StdCall public static extern IntPtr RSADecryptByPrivateKey(string content, string sPriKey); [System.Runtime.InteropServices.DllImportAttribute("ConfigLab.Cpp.Comp.dll", EntryPoint = "FreeBuffer", CallingConvention = CallingConvention.Cdecl)]//發現.netcore中AnyCpu下用CallingConvention = CallingConvention.Cdecl,而在 .net framework的x86下必須用CallingConvention.StdCall public static extern void FreeBuffer(System.IntPtr pBuffer);
步驟2:調用加密算法(解密你們都能看着寫出來的).
IntPtr pRSAEncrypt = Win32CompEncrypt.RSAEncryptByPublicKey("123456", sPublicKey); string sResult= Marshal.PtrToStringAnsi(pRSAEncrypt);//從字符指針的位置開始讀取字符串 Win32CompEncrypt.FreeBuffer(pRSAEncrypt);//釋放c++中的資源
圖示中RSA算法須要用到公鑰私鑰對,除了能夠百度下openssl生成祕鑰以外,這裏推薦下面這個: 通用調試工具.
工具下載地址:https://files.cnblogs.com/files/taohuadaozhu/ConfigLab.Test.ex-200606.rar
[注1] 若是是用openssl生成的,須要注意pkcs1,pkcs8兩種格式的rsa祕鑰。
[注2]若是已經存在的祕鑰,則能夠嘗試用本調試工具進行rsa祕鑰的相關轉換:
[注3]這裏提供本文用c++生成的能夠不一樣語言引用的dll(本文同時生成了x86,x64的dll), 有興趣的同窗能夠用其它語言進行調用測試, 固然也可能由於導出聲明的文件中關鍵詞須要調整.
https://files.cnblogs.com/files/taohuadaozhu/ConfigLab.Cpp.Comp.dll.rar