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

近期,我深入学习了如何使用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.mzph.cn/diannao/32043.shtml

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

相关文章

[数据集][目标检测]棉花叶子害虫检测数据集VOC+YOLO格式571张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;595 标注数量(xml文件个数)&#xff1a;595 标注数量(txt文件个数)&#xff1a;595 标注类别…

Linux驱动调试——使用DEVICE_ATTR实现cat、echo指令调试驱动

在平常做一些驱动调试的时候&#xff0c;每次都写应用去调试相对较麻烦&#xff0c;有一个非常便捷的操作方法就是使用device_attr&#xff0c;只需要执行shell指令例如echo和cat就可以看到效果&#xff0c;不需要再单独写一个测试demo。 看网上很多博客在这一块的使用上写的都…

FENDI CLUB精酿啤酒与小麦的不解之缘

FENDI CLUB精酿啤酒与小麦之间这种联系体现在啤酒的酿造原料、口感特色以及文化内涵等多个方面。以下是关于这两者之间关系的详细分析&#xff1a; 一、酿造原料的紧密联系 小麦作为关键原料&#xff1a;FENDI CLUB精酿啤酒在酿造过程中&#xff0c;小麦是不可或缺的原料之一…

Mybatis 系列全解(1)——全网免费最细最全,手把手教,学完就可做项目!

Mybatis 系列全解&#xff08;1&#xff09; 1. 第一个小程序2. CURD 增删改查3. 模糊查询4. 配置解析4.1 核心配置文件4.2 环境配置4.3 属性4.4 类型别名4.5 设置4.6 映射器 mappers 1. 第一个小程序 1&#xff09;创建一个数据库&#xff0c;一个表&#xff0c;填入一些数据…

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

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

华为---OSPF被动接口配置(四)

9.4 OSPF被动接口配置 9.4.1 原理概述 OSPF被动接口也称抑制接口&#xff0c;成为被动接口后&#xff0c;将不会接收和发送OSPF报文。如果要使OSPF路由信息不被某一网络中的路由器获得且使本地路由器不接收网络中其他路由器发布的路由更新信息&#xff0c;即已运行在OSPF协议…

FuTalk设计周刊-Vol.031

&#x1f525;AI漫谈 热点捕手 1、如何用自然语言 5 分钟构建个人知识库应用&#xff1f;我的 GPTs builder 尝试 开发者的想象力闸门一旦打开&#xff0c;迎接我们的必然是目不暇接的 AI 应用浪潮冲击。 链接https://sspai.com/post/84325 2、GPT-4 Turbo、功能融合&#x…

【机器学习】大模型驱动下的医疗诊断应用

摘要&#xff1a; 随着科技的不断发展&#xff0c;机器学习在医疗领域的应用日益广泛。特别是在大模型的驱动下&#xff0c;机器学习为医疗诊断带来了革命性的变化。本文详细探讨了机器学习在医疗诊断中的应用&#xff0c;包括疾病预测、图像识别、基因分析等方面&#xff0c;并…

LCR 142.训练计划IV

1.题目要求: /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ int compare(const void* a,const void* b) {return (*(int*)a - *(int*)b); } struct ListNode* trainningPlan(struct ListNode* l1, struct Li…

【数据结构】第十九弹---C语言实现冒泡排序算法

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、冒泡排序基本思想 2、代码的初步实现 3、代码的优化 4、代码的测试 5、时空复杂度分析 6、模拟实现qsort 6.1、冒泡排序函数 6.2、交换数…

针对 AI 优化数据湖仓一体:使用 MinIO 仔细了解 RisingWave

RisingWave 是现代数据湖仓一体处理层中的开源流数据库&#xff0c;专为性能和可扩展性而构建。RisingWave 旨在允许开发人员在流数据上运行 SQL。鉴于 SQL 是数据工程的通用语言&#xff0c;此功能非常重要。它具有强大的架构&#xff0c;包括计算节点、元节点和压缩器节点&am…

分享一个 Fail2ban 过滤规则

今天明月给大家分享个 Fail2ban 的过滤&#xff08;Filter&#xff09;规则&#xff0c;有关 Fail2ban 的文章大家可以参考【服务器全面使用 Fail2Ban 初见成效】和【使用 Fail2ban 禁止垃圾采集爬虫&#xff0c;保护 Nginx 服务器】等文了解&#xff0c;总之 Fail2ban 是 Linu…

分流井设备的监测控制和智慧运维

分流井是一种用于将雨水和污水进行分离的设施&#xff0c;通常设置在雨水管和污水管的汇合处。它可以根据不同的情况&#xff0c;将雨水和污水分别排放到不同的管道中&#xff0c;从而实现雨污分流的目的。 以下是一些常见的分流井类型和工作原理&#xff1a; 1、智能分流井&a…

java-SpringBoot执行定时任务-任务调度-@EnableScheduling和@Scheduled

文章目录 java借助springBoot框架&#xff0c;执行定时任务0. 项目地址1. 需求分析2、新建springBoot项目3. 编写定时任务3.1 开启调度任务3.2 编写定时任务方法 java借助springBoot框架&#xff0c;执行定时任务 0. 项目地址 https://github.com/OrangeHza/JavaDemo 1. 需求…

Redis小对象压缩

小对象压缩存储 如果Redis内部管理的集合数据结构很小&#xff0c;他会使用紧凑存储形式压缩存储。 Redis的ziplist是一个紧凑的字节数组结构&#xff0c;如下图所示&#xff0c;每个元素之间都是紧挨着的。 如果他存储的是hash结构&#xff0c;那么key和value会作为两个ent…

竞赛 机器视觉的试卷批改系统 - opencv python 视觉识别

文章目录 0 简介1 项目背景2 项目目的3 系统设计3.1 目标对象3.2 系统架构3.3 软件设计方案 4 图像预处理4.1 灰度二值化4.2 形态学处理4.3 算式提取4.4 倾斜校正4.5 字符分割 5 字符识别5.1 支持向量机原理5.2 基于SVM的字符识别5.3 SVM算法实现 6 算法测试7 系统实现8 最后 0…

Maven添加reactor依赖失败

目录 情况说明 解决过程 情况说明 起初是自己在学spring boot3&#xff0c;结果到了reactor这一部分的时候&#xff0c;在项目的pom.xml文件中添加下列依赖报错&#xff1a; <dependencyManagement><dependencies><dependency><groupId>io.projectr…

【CPP】插入排序、希尔排序

目录 1.插入排序1.1直接插入排序简介代码分析 1.2直接插入对比冒泡排序简介代码对比分析(直接插入排序与冒泡的复杂度效率区别) 1.3希尔排序简介代码分析 1.插入排序 基本思想&#xff1a;把一个待排数字按照关键码值插入到一个有序序列中&#xff0c;得到一个新的有序序列。 …

前沿技术丨S2S自动化测试解决方案

技术背景 随着面向服务的架构&#xff08;Service-Oriented Architecture&#xff0c;SOA&#xff09;在整车架构中的逐步推进及应用&#xff0c;车内网络通信中会一直并存基于以太网的面向服务和基于传统网络的面向信号的两类控制器&#xff0c;S2S&#xff08;Signal to Ser…

AXI学习笔记

文章目录 AXI口诀&#xff1a;AXI三种总线&#xff0c;三种接口&#xff0c;一个协议背景知识一、 AMBA&#xff1a;二、AXI2.1 通信协议与握手机制2.2 AXI协议特点2.3 三种AXI总线类型&#xff08;AXI4、AXI4-lite、AXI4-stream&#xff09;2.3.1 AXI通道&#xff08;5通道&am…