Jni:使用openssl库进行rsa加密解密(实现篇)

前面,已经对于一个vs 2019 的jni环境的搭建已经做了说明。
免费机票 Jni:使用openssl库进行rsa加密解密 (环境搭建篇)

安装Openssl

windows安装:
百度网盘下载
链接:https://pan.baidu.com/s/10WlgBJ3J25oIH4JXVgWLOA
提取码:ABCD
无脑安装版,略过。这里你要记住你安装好的位置。例如我的是 C:\Program Files\OpenSSL-Win64

Centos安装:
这里我是在网上摘抄的。安装这些就不写了,不是本篇重点

mkdir /opt/openssl -p
cd /opt/openssl
wget http://www.openssl.org/source/openssl-1.0.2j.tar.gz
tar -zxf openssl-1.0.2j.tar.gz
./config --prefix=/usr/local/openssl
make & make install

vs 2019 中引入openssl库

1、右键项目,选择Properties,之后把 openssl的安装目录下的include加到以下位置(偷懒直接贴图)
在这里插入图片描述
2、添加openssl的lib到lib directories中
在这里插入图片描述

3、添加libssl.lib和libcrypto.lib 到link中
在这里插入图片描述
至此,你的openssl环境基本搭建好了

RSA加密解密

公钥加密
注意:准备的公钥需要以 “-----BEGIN PUBLIC KEY-----\n"开头,以”\n-----END PUBLIC KEY-----\n"结尾,里面的’\n’表示换号符
注意:准备的私钥需要以 “-----BEGIN RSA PRIVATE KEY-----\n"开头,以”\n-----END RSA PRIVATE KEY-----\n"结尾,里面的’\n’表示换号符

Jni的转换操作类,主要是为了方便java跟c++的类型转换方便
MyJniConvertUtils.h

#pragma once
#include <iostream>
#include <jni.h>
#include <string.h>
class MyJniConvertUtils
{
   
public:
        static int toCharArray(JNIEnv* env, jbyteArray byteArray, char*& dest);

        static int toCharArray(JNIEnv* env, jstring param, char*& dest);

        static jbyteArray toJbyteArray(JNIEnv* env, const char* data, const int length);

        static std::string getProperty(JNIEnv* env, std::string key);

        static std::string toString(const char* chars, const int length);

        static jstring toJString(JNIEnv* env, const std::string input);

        static std::string toString(JNIEnv* env, jstring param);
};

MyJniConvertUtils.cpp

#include "MyJniConvertUtils.h"
#include <string.h>

jstring MyJniConvertUtils::toJString(JNIEnv* env, const std::string input) {
   
        const char* cs = input.c_str();
        jclass strClass = (env)->FindClass("Ljava/lang/String;");
        jmethodID ctorID = (env)->GetMethodID(strClass, "<init>", "([BLjava/lang/String;)V");
        jbyteArray bytes = (env)->NewByteArray(strlen(cs));
        (env)->SetByteArrayRegion(bytes, 0, strlen(cs), (jbyte*)cs);
        jstring encoding = (env)->NewStringUTF("UTF8");
        return (jstring)(env)->NewObject(strClass, ctorID, bytes, encoding);
}

int MyJniConvertUtils::toCharArray(JNIEnv* env, jbyteArray byteArray, char*& dest) {
   
        jbyte* bytes;
        bytes = env->GetByteArrayElements(byteArray, 0);
        int byteLength = env->GetArrayLength(byteArray);
        int length = byteLength + 1;
        dest = new char[length];
        memset(dest, 0, length);
        memcpy(dest, bytes, byteLength);
        env->ReleaseByteArrayElements(byteArray, bytes, 0);
        return length;
}

int MyJniConvertUtils::toCharArray(JNIEnv* env, jstring param, char*& dest) {
   </
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值