IKVM.net调用Jar包实现SM4解密

news2024/10/7 20:29:22

近期,我深入学习了如何使用IKVM.net来调用Jar包,这次的学习经历让我对Java与.NET之间的互操作性有了更深刻的理解。IKVM.net作为一款强大的工具,为我们打通了Java与.NET之间的桥梁,使得在.NET环境中调用Java库变得简单而高效。

在学习过程中,我首先了解了IKVM.net的基本原理和架构。它通过将Java字节码转换为.NET的CIL(Common Intermediate Language)字节码,使得Java库可以在.NET环境中运行。这种转换过程保留了Java库原有的功能和性能,同时也充分利用了.NET平台的优势。

接下来,我尝试使用IKVM.net来调用一个具体的Jar包。在这个过程中,我遇到了一些挑战,比如如何正确配置IKVM.net的环境、如何导入Java库以及如何处理Java与.NET之间的类型映射等问题。通过查阅文档和搜索相关资料,我逐渐解决了这些问题,并成功实现了Jar包的调用。

在调用Jar包的过程中,我深刻体会到了IKVM.net的灵活性和强大性。它允许我们在.NET代码中直接使用Java库中的类和方法,就像使用普通的.NET库一样。这种无缝的集成方式极大地提高了开发效率,也降低了维护成本。

然而,我也发现了一些IKVM.net在使用上的限制和不足之处。比如,一些复杂的Java库可能无法完全转换为.NET代码,导致某些功能无法使用。此外,由于Java和.NET在内存管理和垃圾回收机制上存在差异,因此在使用IKVM.net时需要特别注意内存泄漏和性能优化等问题。

针对这些问题,我认为在使用IKVM.net时应该采取一些策略来规避风险。首先,我们应该尽量选择那些已经经过验证和优化的Java库进行调用,以避免潜在的问题。其次,在调用Java库时,我们应该注意内存使用和性能监控,及时发现并解决潜在的问题。最后,我们还可以考虑使用其他跨平台解决方案或混合编程技术来替代IKVM.net,以满足特定的需求。

通过这次学习,我不仅掌握了IKVM.net的使用方法,还学会了如何分析和解决在调用Jar包过程中遇到的问题。我相信这些经验和技能将在未来的开发工作中发挥重要作用,帮助我更好地应对各种挑战和需求。

总之,IKVM.net是一个强大的工具,它为我们打通了Java与.NET之间的桥梁。虽然在使用过程中可能会遇到一些问题,但只要我们掌握了正确的方法和策略,就能够充分利用它的优势,实现Java与.NET之间的无缝集成。

以上是AI写的部分。。。用来水字数

下面是实际操作。由于需要对java程序SM4加密的字段进行解密,试过通过C#代码实现SM4解密,但是即使代码流程相同,但是可能是Java和C#底层差异的原因导致始终无法解密,所以采用了IKVM方案直接调用jar包进行解密。

  • .net core项目调用jar包

环境

Netcore版本:.netCore5.0

Ikvm版本:8.5.0

JavaSDK版本:jdk1.8

JavaIDE:Idea2024

C#IDE:VS2022

NuGet下载IKVM包

项目放入jar包


编辑项目文件

添加以下配置项

<ItemGroup>

<IkvmReference Include="jar/xxxx.jar">

<AssemblyName>xxxx</AssemblyName>

<AssemblyVersion>x.x.x</AssemblyVersion>

</IkvmReference>

</ItemGroup>

测试jar包

using log4net;

using System;

using System.Text;


namespace TestService

{
    class Program
    {
        private static ILog log = LogManager.GetLogger(typeof(Program));

        /**
         * 默认 SECRET_KEY
         * 当时用ECB模式的时候,和前端key一致
         * secretKey 必须为16位,可包含字母、数字、标点
         */
        private static String SECRET_KEY = "1234123412341234";

        /**
         * 默认 IV
         * 当时用CBC模式的时候,SECRET_KEY和IV都需要传值,解密要和加密的SECRET_KEY和IV一致,更加安全
         * iv 必须为 16 位,可包含字母、数字、标点
         */
        private static String IV = "1234123412341234";
        static void Main(string[] args)
        {
            string value = SM4Utils.decryptData_CBC("xxxxxx", SECRET_KEY, IV);
            byte[] arr = Convert.FromBase64String(value);
            string value2 = Encoding.UTF8.GetString(arr);
            Console.WriteLine(value);
            Console.WriteLine(value2);
            Console.ReadLine();
        }
    }
}

  • .net framework调用jar包

环境

NetFramework版本:.net framework4.6.1

Ikvm版本:8.1.5717

JavaSDK版本:jdk1.8

JavaIDE:Idea2024

C#IDE:VS2022

下载IKVM运行包

下载IKVM的运行包,由于我是jdk1.8,所以需要是IKVM8才行。所以下载了IKVM8.1.5717版本

生成jar包(如果有直接可以使用的jar包可以跳过这步)

新建项目

输入项目名,选择maven

在pom文件中加入要导入的工具jar包,为了简化后面的dll生成步骤,最好只给必要的jar,不然生成dll的时候可能会出现缺少关联的情况

编写好程序后,选择项目属性

选择Artifacts

选择根据导出生成jar包

创建artifacts

然后在指定的位置可以看到生成的jar包和关联的jar包

  1. 将jar包转换为dll文件

打开cmd,进入ikvm的bin目录,例如(ikvm-8.1.5717.0\bin)

将jar包移入bin目录(此操作只是为了方便执行命令)

执行命令ikvmc -target:library xxx-x.x.x.jar

如果该jar有关联的jar包,则需要将关联包转为dll文件,然后转换目标jar包时关联jar对应的dll包,命令如下

ikvmc -target:library xxx-x.x.x.jar -r:xxxx.dll -r:xxx1.dll

程序NuGet下载IKVM包

根据之前转换的IKVM版本下载对应的NuGet包

将dll文件导入程序

添加dll引用,相关的dll都需要引用

然后就可以测试jar里面的方法是否可以调用了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1849356.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

生产环境安装odoo

odoo可以在多平台运行&#xff0c;但是在生产环境下官方不建议在Windows平台部署。在Windows下可能不能很好的支持一服务多worker的形式&#xff0c;更推荐在Linux下部署。 常见的Linux如Ubuntu、Debian等Debian系或Redhat系都能执行官网的包安装。 地址&#xff1a;Download |…

使用Jetpack Compose为Android App创建自定义页面指示器

使用Jetpack Compose为Android App创建自定义页面指示器 在现代移动应用中&#xff0c;页面指示器在提供视觉导航提示方面发挥着重要作用&#xff0c;帮助用户理解其在应用内容中的当前位置。页面指示器特别适用于顺序展示内容的场景&#xff0c;如图片轮播、图像库、幻灯片放…

Python3简单实现与Java的Hutool库SM2的加解密互通

1、背景&#xff1a; 因业务需求&#xff0c;需要与某平台接口对接。平台是Java基于Hutool库实现的SM2加密解密&#xff0c;研究了下SM2的加解密算法&#xff0c;网上找的资料&#xff0c;都是说SM2【椭圆曲线】 公钥长【x,y分量 64字节】&#xff0c;私钥短【32字节】&#x…

ChatTTS增强版V3【已开源】,长文本修复,中英混读,导入音色,批量SRT、TXT

ChatTTS增强版V3来啦&#xff01;本次更新增加支持导入SRT、导入音色等功能。结合上次大家反馈的问题&#xff0c;修复了长文本、中英混读等问题。 项目已开源(https://github.com/CCmahua/ChatTTS-Enhanced) 项目介绍 V3 ChatTTS增强版V3&#xff0c;长文本修复&#xff0c…

拔河【码蹄杯】/二分

拔河 二分 思路&#xff1a;二分平均力量值&#xff0c;并在check中利用前缀和判断。 #include<bits/stdc.h> using namespace std; typedef long long ll; ll a[100005]; double sum[100005]; ll f,n; bool check(double x) {double dx;double mn0;for(int i1;i<n;…

【MySQL进阶之路 | 高级篇】InnoDB存储结构

1. 数据库的存储结构 : 页 索引结构给我们提供了高效的索引方式&#xff0c;不过索引信息以及数据记录都是保存在文件上的.确切说是存储在页结构中.另一方面&#xff0c;索引是在存储引擎中实现的&#xff0c;MySQL服务器上的存储引擎负责对表中数据的读取和写入操作.不同的存…

助力数据跨境,最新政策解读与应用实践分享

6月13日&#xff0c;VERYCLOUD睿鸿股份联合深数所企业数据合规服务南山工作站、亚马逊云科技&#xff0c;在深圳南山区共同主办了一场关于《数据出境合规之路——法规解析与实践探索》研讨会。 VERYCLOUD睿鸿股份是南山大数据产业协会的副会长单位。南山大数据产业协会作为深圳…

Python二级考试试题

1. 关于数据的存储结构&#xff0c;以下选项描述正确的是 A 数据所占的存储空间量 B 数据在计算机中的顺序存储方式 C 数据的逻辑结构在计算机中的表示 D 存储在外存中的数据 正确答案&#xff1a; C 2. 关于线性链表的描述&#xff0c;以下选项中正确的是 A 存储空…

CSDN低质量分文章自动化获取

1. 背景 最近粉丝终于达到了5K&#xff0c;可是仍然无法通过优质作者申请&#xff0c;原来是平均质量分较低&#xff0c;优化了一些文章后分数提高仍然较慢&#xff0c;所以需要批量获取低质量文章&#xff0c;重点优化 2. 目标效果 3. 核心代码 其中的Cookie可以根据浏览器…

Ubuntu系统通过GRUB引导菜单进入恢复模式修改账户密码

当在Ubuntu系统中忘记了账户密码时&#xff0c;有几种方法可以破解或重置密码。 本指引文档方法&#xff1a;通过GRUB引导菜单进入恢复模式 实践环境为&#xff1a;20.04.6 LTS (Focal Fossa) 1. 重启Ubuntu系统&#xff1a;首先&#xff0c;你需要重启你的Ubuntu系统。 2. …

【PyTorch】【机器学习】图片张量、通道分解合成和裁剪

一、导入所需库 from PIL import Image import torch import numpy as np import matplotlib.pyplot as plt二、读取图片 pic np.array(Image.open(venice-boat.jpg))上述代码解释&#xff1a;先用Image.open()方法读取jpg格式图片&#xff0c;再用np.array()方法将图片转成…

图解Transformer

图解Transformer Transformer模型是在论文《Attention is All You Need》中提出的。它的TensorFlow实现作为Tensor2Tensor包的一部分是可用的。哈佛大学的自然语言处理小组创建了一个指南&#xff0c;用PyTorch实现对论文进行了注释。在这篇文章中&#xff0c;我们将尝试简化一…

基于CST的连续域束缚态(BIC)设计与机制研究

关键词&#xff1a;太赫兹&#xff0c;超表面&#xff0c;连续域束缚态&#xff0c;CST&#xff0c;高Q 束缚态的概念最先出现于量子力学中&#xff0c;当粒子被势场约束在特定的区域内运动&#xff0c;即在无限远处波函数等于零的态叫束缚态&#xff0c;例如势阱中的粒子就处…

MySQL操作语句练习【经典20题】

emp 表视图 dept 表视图 题目 1.请从表EMP中查找工种是职员CLERK或经理MANAGER的雇员姓名、工资。 2.请在EMP表中查找部门号在10&#xff0d;30之间的雇员的姓名、部门号、工资、工作。 3.请从表EMP中查找姓名以J开头所有雇员的姓名、工资、职位。 4.请从表EMP中查找工资低…

EM算法数学推导

EM算法可以看李航老师的《机器学习方法》、机器学习白板推导、EM算法及其推广进行学习。下文的数学推导出自“南瓜书”&#xff0c;记录在此只为方便查阅。

qt 简单实验 读取json格式的配置文件

1.概要 2.代码 //#include "mainwindow.h"#include <QApplication> #include <QFile> #include <QJsonDocument> #include <QJsonObject> #include <QDebug> //读取json数据的配置文件QJsonObject readJsonConfigFile(const QString …

python-邮票组合问题

[题目描述] 某人有四张3分的邮票和三张5分的邮票&#xff0c;用这些邮票中的一张或若干张可以得到多少种不同的邮资&#xff1f;输入格式&#xff1a; 此题无输入。输出格式&#xff1a; 输出可以得到不同邮资的数量。 样例输入 无样例输出 19数据范围&#xff1a; 对于100%的…

Stable Diffusion 3 文本生成图像 在线体验 原理分析

前言 本文分享使用Stable Diffusion 3实现文本生成图像&#xff0c;可以通过在线网页中免费使用的&#xff0c;也有API等方式访问。 同时结合论文和开源代码进行分析&#xff0c;理解其原理。 Stable Diffusion 3是Stability AI开发的最新、最先进的文本生成图像模型&#x…

Linux常用命令(16)—awk命令(有相关截图)

写在前面&#xff1a; 最近在学习Linux命令&#xff0c;记录一下学习Linux常用命令的过程&#xff0c;方便以后复习。仅供参考&#xff0c;若有不当的地方&#xff0c;恳请指正。如果对你有帮助&#xff0c;欢迎点赞&#xff0c;关注&#xff0c;收藏&#xff0c;评论&#xf…

秋招突击——6/21——新作{两两交换链表中的节点,K个一组反转链表}

文章目录 引言新做删除有序数组中的重复项个人实现 K 个一组翻转链表个人实现参考代码 总结 引言 上午完全去听讲座了&#xff0c;听了三场&#xff0c;拿了三个讲座单&#xff0c;从九点一直到十二点。笔记本电脑插电才能用&#xff0c;就没带&#xff0c;所以没有进行复习。…