項目中遇到了無法正常跨語言加解密的問題,需要將jar文件轉換為dll文件供c#調用。
一. 下載IKVM.NET及配置
下載地址:http://www.ikvm.net/download.html
解壓后,需要配置環境變量,在"Path"中添加bin目錄的路徑。
二.轉換dll
打開cmd,cd到jar包所在路徑。 轉換使用命令: ikvmc -target:library jar包名稱.jar -r:依賴項1.dll -r:依賴項2.dll -r:..........
注意:需要先將被依賴的jar包生成為dll ,並 在 "-r:"中指定,否則生成的dll會有錯誤,顯示class not found等:
示例:將包含sm2國密加密算法的“bcprov-jdk16-145.jar”轉換為dll --->>
以此為例,bcporv.jar包需要依賴 junit.jar , 則先要生成junit.dll 。
log4j.jar依賴了javax.jsm以及mail.jar 則先生成javax.jsm.dll和mail.dll .......
以此類推,直到所有依賴項都成功生成為dll后,使用 -r:xxxxxx.dll 加上依賴項的dll再進行生成,
例如生成log4j.dll時:ikvmc -target:library log4j.jar -r:mail-1.4.7.dll -r:javax.jms.dll
也可以使用 -out:xxx.dll 指定生成dll的名稱 : ikvmc -target:library crypWeb.jar -out:crpytoForDotNet.dll -r:log4j-1.2.17.dll -r:commons-lang-2.5.0.dll -r:bcprov-jdk16-145.dll -r:commons-codec-1.14.dll
另外,如果出現skiping class ,可以忽略,因為ikvm提供的dll中已存在
dll生成成功后(沒有warning時),即可以像普通dll一樣添加引用到c#項目
三. C#中調用
需要引用IKVM.NET提供的dll 。 到ikvm安裝路徑的bin目錄中 找到相關的dll, 一般只需要IKVM.OpenJDK.Core.dll 。之后便可以調用dll中的java方法
另外:引用生成的dll時,中途產生的依賴項的dll也要引用 ;jar包中的包名就是命名空間名稱