【easily-openJCL】要尝试下用 显卡 做数据对称加密吗?

news2024/12/22 15:54:49

easily-openJCL 要尝试下用 显卡 做数据对称加密吗?

开源技术栏

本文演示了一个案例,使用显卡进行数据加密哦,加密方法是 XOR

目录

文章目录

  • easily-openJCL 要尝试下用 显卡 做数据对称加密吗?
    • 目录
    • 开始
      • 导入项目库
      • 加密操作
      • 解密操作
    • 性能如何

在这里插入图片描述

开始

导入项目库

从 1.0.3 版本之后,easily-openJCL 支持了 XOR 的加密与解密操作,我们可以直接引入此版本的依赖库文件,下面是坐标!

    <dependencies>
        <!-- https://mvnrepository.com/artifact/io.github.BeardedManZhao/easily-openJCL -->
        <dependency>
            <groupId>io.github.BeardedManZhao</groupId>
            <artifactId>easily-openJCL</artifactId>
            <version>1.0.3</version>
        </dependency>
    </dependencies>

加密操作

package org.example;

import io.github.BeardedManZhao.easilyJopenCL.EasilyOpenJCL;
import io.github.BeardedManZhao.easilyJopenCL.MemSpace;
import io.github.BeardedManZhao.easilyJopenCL.kernel.LengthKernelSource;
import org.jocl.Pointer;
import org.jocl.Sizeof;

public class Main {
    public static void main(String[] args0) {
        // 准备一个 easilyOpenJCL 操作对象
        final EasilyOpenJCL easilyOpenJCL = EasilyOpenJCL.initOpenCLEnvironment(
                // 为对象装载两个计算组件 分别是 XOR 加密和解密使用的组件
                LengthKernelSource.ARRAY_ENCODE_XOR_ARRAY_CHAR2,
                LengthKernelSource.ARRAY_DECODE_XOR_ARRAY_CHAR2
        );
        // 准备两个 char 数组 a b 分别代表的是被加密的数据和加密使用的密钥
        final char[] a = "this is a data!!!".toCharArray(), b = "349567456456".toCharArray();
        // 准备一个数值 代表结果的长度 需要在内存空间对象中设置,用来开辟内存
        final long resLen = a.length;
        // 使用内存空间对象将 a 和 b 进行封装
        MemSpace memSpace = easilyOpenJCL.createMemSpace(
                // 两个 char 数组的指针,用来读取数据
                Pointer.to(a), Pointer.to(b),
                // 两个指针的空间 以及 结果需要的空间 还有每个元素需要的字节数
                a.length, b.length, resLen, Sizeof.cl_char2,
                // 指定当前内存空间要用来做哪个计算 这里是加密
                LengthKernelSource.ARRAY_ENCODE_XOR_ARRAY_CHAR2
        );
        // 调用 easilyOpenJCL 开始操作加密任务
        easilyOpenJCL.calculate(bf -> {
            for (int i = 0; i < resLen; i++) {
                // 在这里打印出来加密的结果 为了避免出现不可识别的字符,直接转换成数值
                System.out.print((int) bf.getChar(i * Sizeof.cl_char2) + " ");
            }
        }, memSpace, true);
    }
}

上面代码的计算结果如下所示!其中每个数值都是一个字符的 ASCII 形式

71 92 80 70 22 94 71 21 87 20 81 87 71 85 24 20 23 

解密操作

在上面我们已经对于一个字符串进行了加密操作,并将加密之后的每个字符的ASCII统计了出来,下面我们要对加密之后的 71 92 80 70 22 94 71 21 87 20 81 87 71 85 24 20 23 进行 解密操作。

package org.example;

import io.github.BeardedManZhao.easilyJopenCL.EasilyOpenJCL;
import io.github.BeardedManZhao.easilyJopenCL.MemSpace;
import io.github.BeardedManZhao.easilyJopenCL.kernel.LengthKernelSource;
import org.jocl.Pointer;
import org.jocl.Sizeof;

public class Main {
    public static void main(String[] args0) {
        // 准备加密之后的数据
        char[] chars = {71, 92, 80, 70, 22, 94, 71, 21, 87, 20, 81, 87, 71, 85, 24, 20, 23};
        // 准备解密的密钥 需要和加密的一致,否则解析之后就不同了
        char[] key = "349567456456".toCharArray();
        // 设置解密之后的数组长度,应该是和 chars 一致!
        final long l = chars.length;
        // 准备一个 easilyOpenJCL 操作对象
        final EasilyOpenJCL easilyOpenJCL = EasilyOpenJCL.initOpenCLEnvironment(
                // 为对象装载两个计算组件 分别是 XOR 加密和解密使用的组件
                LengthKernelSource.ARRAY_ENCODE_XOR_ARRAY_CHAR2,
                LengthKernelSource.ARRAY_DECODE_XOR_ARRAY_CHAR2
        );
        // 封装内存空间 解密时候的操作数分别是 加密之后的数据chars 以及 加密时使用的key
        MemSpace memSpace = easilyOpenJCL.createMemSpace(
                Pointer.to(chars), Pointer.to(key),
                chars.length, key.length, l, Sizeof.cl_char2,
                LengthKernelSource.ARRAY_DECODE_XOR_ARRAY_CHAR2
        );
        // 直接开始解密操作
        easilyOpenJCL.calculate(byteBuffer -> {
            for (int i = 0; i < l; i++) {
                System.out.print(byteBuffer.getChar(i * Sizeof.cl_char2));
            }
        }, memSpace, true);
    }
}

在下面就是计算结果,可以看到它成功的将数据还原了出来!

this is a data!!!

性能如何

使用 GPU 进行加密操作,相较于CPU,速度会快许多,下面是我们的一个基准测试代码,以及测试结果,其将非常庞大的字符数组进行了加密和解密操作!

CPUGPU
i7-12700RX550

有趣的是,GPU远远落后于CPU工艺的情况下,CPU的计算速度比 GPU 的慢

在这里插入图片描述

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

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

相关文章

挖到宝了!统一dlp数据防泄漏解决方案有哪些?千字长文带你熟知这6款!

信息外泄、内部疏忽、离职泄密、黑客入侵、系统漏洞、第三方风险&#xff0c;这些司空见惯的企业数据泄漏问题&#xff0c;无一不牵动着企业的神经&#xff0c;考验着企业的数据安全防线。 今天&#xff0c;我们就来深挖几款统一dlp数据防泄漏解决方案&#xff0c;帮助企业筑起…

wflow-web:开源啦 ,高仿钉钉、飞书、企业微信的审批流程设计器,轻松打造属于你的工作流设计器

嗨&#xff0c;大家好&#xff0c;我是小华同学&#xff0c;关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 wflow-web是一个开源的工作流设计器&#xff0c;它支持可视化拖拽表单组件&#xff0c;动态任意层级结构审批节点&#xff0c;以及复杂流程条件的设置…

VUE3实现好看的世界建筑中国建筑网站源码

文章目录 1.设计来源1.1 网站主界面1.2 登录界面1.3 注册界面1.4 特色建筑展览界面1.5 世界建筑介绍界面1.6 世界建筑介绍 - 详情界面1.7 中国建筑介绍界面1.8 中国建筑介绍 - 详情界面1.9 关于我们界面 2.效果和源码2.1 动态效果2.2 源代码2.3 目录结构 源码下载万套模板&…

Flink新版Source接口源码解析

目录 1. 前言 2. Source解析 2.1 Source类图 2.2 接口和方法说明 2.2.1 Source,> 3. SplitEnumerator解析 3.1 SplitEnumetator类图 3.2 类和方法说明 3.2.1 SplitEnumerator 3.2.2 SimpleVersionedSerializer 4. SourceReader解析 4.1 SourceReader类图 4.2 类…

SpringCloud Gateway网关路由配置 接口统一 登录验证 权限校验 路由属性

介绍 Spring Cloud Gateway 根据请求的路径、HTTP 方法、头部等信息&#xff0c;将请求路由到对应的微服务实例。它支持基于动态路由规则的配置&#xff0c;可以根据请求的 URL、查询参数、请求头等条件&#xff0c;灵活地决定将请求转发到哪个微服务。Spring Cloud Gateway 提…

【老白学 Java】你能想到「封装」说明有点专业

你能想到「封装」说明有点专业 文章来源&#xff1a;《Head First Java》修炼感悟。 上一章&#xff0c;师兄们能否理解对象属性的相互关系&#xff1f; 本章老白想聊聊数据安全的问题&#xff0c;毕竟谁都不想把自己的数据暴露于大庭广众之下。 如果那样的话将毫无隐私可言&a…

chat2db调用ollama实现数据库的操作。

只试了mysql的调用。 其它的我也不用&#xff0c;本来想充钱算了。最后一看单位是美刀。就放弃了这分心。于是折腾了一下。 本地运行chat2db 及chat2db ui https://gitee.com/ooooinfo/Chat2DB clone 后运行起来 chat2db的java端&#xff0c;我现在搞不清这一个项目是有没有…

主机型入侵检测系统(HIDS)——Elkeid在Centos7的保姆级安装部署教程

一、HIDS简介 主机型入侵检测系统(Host-based Intrusion Detection System 简称:HIDS);HIDS作为主机的监视器和分析器,主要是专注于主机系统内部(监视系统全部或部分的动态的行为以及整个系统的状态)。 HIDS使用传统的C/S架构,只需要在监测端安装agent即可,且使用用户…

qt中ctrl+鼠标左键无法进入

现象&#xff1a;qt中ctrl鼠标左键无法跳转部分函数&#xff0c;例如能跳到textEdit->toPlainText().&#xff0c;但无法跳转到toUtf8();但编译没有问题 排查1&#xff1a;我发现是交叉编译链的问题&#xff0c;使用linux自带就可以进&#xff0c;用ATK-I.MX6U就部分不能进…

Android gradle下载失败后 解决方案

Android 导入gradle一直失败&#xff0c;更新gradle源即可 比如项目里默认的是 distributionUrlhttps\://services.gradle.org/distributions/gradle-7.3.3-bin.zip 用下面这个来替换distributionUrlhttps\://mirrors.cloud.tencent.com/gradle/gradle-7.3.3-bin.zip

基于Java Springboot餐厅点餐系统(加入商家版)

一、作品包含 源码数据库设计文档万字全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA 数据库&#xff1a;MySQL5.7…

开源项目推荐——OpenDroneMap无人机影像数据处理

实景三维作为GIS最火的课题&#xff0c;最近在想做一套自己的三维构建工具&#xff0c;考察了几个开源项目&#xff0c;把自己的搜索过程用csdn记录下来&#xff0c;希望也能帮助到各位同仁。 OpenDroneMap&#xff08;ODM&#xff09;是一个开源项目&#xff0c;旨在处理无人…

手动安装Ubuntu系统中的network-manager包(其它包同理)

自己手闲把系统中的network-manager包给删了&#xff0c;导致的结果就是Ubuntu系统彻底没有网络。结果再装network-manager时&#xff0c;没有网络根本装不了&#xff0c;网上的方法都试了也没用&#xff0c;然后就自己源码装&#xff0c;这篇文章就是记录一下怎么手动下载包然…

【C++】从零实现 C++ 自定义 list 容器:双向链表与迭代器深度解析

个人主页: 起名字真南的CSDN博客 个人专栏: 【数据结构初阶】 &#x1f4d8; 基础数据结构【C语言】 &#x1f4bb; C语言编程技巧【C】 &#x1f680; 进阶C【OJ题解】 &#x1f4dd; 题解精讲 目录 &#x1f4cc; 1. 引言&#x1f4cc; 2. 内容概要&#x1f4cc; 3. list 容…

Python Excel XLS或XLSX转PDF详解:七大实用转换设置

目录 使用工具 Python将Excel文件转换为PDF Python将Excel文件转换为带页码的PDF Python将Excel文件转换为特定页面尺寸的PDF Python将Excel文件转换为PDF并将内容适应到一页 Python将Excel文件转换为PDF/A Python将Excel文件中的工作表转换为单独的PDF Python将Excel工…

Centos 7 安装wget

Centos 7 安装wget 最小化安装Centos 7 的话需要上传wget rpm包之后再路径下安装一下。rpm包下载地址&#xff08;http://mirrors.163.com/centos/7/os/x86_64/Packages/&#xff09; 1、使用X-ftp 或者WinSCP等可以连接上传的软件都可以首先连接服务器&#xff0c;这里我用的…

LabVIEW 使用 Snippet

在 LabVIEW 中&#xff0c;Snippet&#xff08;代码片段&#xff09; 是一个非常有用的功能&#xff0c;它允许你将 一小段可重用的代码 保存为一个 图形化的代码片段&#xff0c;并能够在不同的 VI 中通过拖放来使用。 什么是 Snippet&#xff1f; Snippet 就是 LabVIEW 中的…

A3超级计算机虚拟机,为大型语言模型LLM和AIGC提供强大算力支持

热门大语言模型项目地址&#xff1a;www.suanjiayun.com/mirrorDetails?id66ac7d478099315577961758 近几个月来&#xff0c;我们目睹了大型语言模型&#xff08;LLMs&#xff09;和生成式人工智能强势闯入我们的视野&#xff0c;显然&#xff0c;这些模型在训练和运行时需要…

开源音乐分离器Audio Decomposition:可实现盲源音频分离,无需外部乐器分离库,从头开始制作。将音乐转换为五线谱的程序

今天给大家分析一个音频分解器&#xff0c;通过傅里叶变换和信封匹配分离音乐中的各个音符和乐器&#xff0c;实现音乐到乐谱的转换。将音乐开源分离为组成乐器。该方式是盲源分离&#xff0c;从头开始制作&#xff0c;无需外部乐器分离库。 相关链接 代码&#xff1a;https:…

35.3K+ Star!PhotoPrism:一款基于AI的开源照片管理工具

PhotoPrism 简介 PhotoPrism[1] 是一个为去中心化网络设计的AI照片应用,它利用最新技术自动标记和查找图片,实现自动图像分类与本地化部署,你可以在家中、私有服务器或云端运行它。 项目特点 主要特点 浏览所有照片和视频,无需担心RAW转换、重复项或视频格式。 使用强大的…