首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

openssl C与android的跨平台AES/CBC加解密

openssl是一个开源的加密库,提供了各种加密算法和工具,包括AES/CBC加解密算法。它可以在多个平台上使用,包括C语言和Android平台。

AES(Advanced Encryption Standard)是一种对称加密算法,广泛应用于数据加密和保护领域。CBC(Cipher Block Chaining)是一种分组密码模式,用于对长文本进行加密。

在C语言中,可以使用openssl库中的函数来实现AES/CBC加解密。具体步骤如下:

  1. 引入openssl库头文件:#include <openssl/aes.h>
  2. 定义AES密钥和初始化向量(IV):unsigned char key[AES_BLOCK_SIZE] = "0123456789abcdef"; unsigned char iv[AES_BLOCK_SIZE] = "fedcba9876543210";
  3. 创建AES加解密上下文:AES_KEY aes_key; AES_set_encrypt_key(key, 128, &aes_key); // 设置加密密钥 AES_set_decrypt_key(key, 128, &aes_key); // 设置解密密钥
  4. 加密数据:unsigned char plaintext[16] = "Hello, World!"; unsigned char ciphertext[16]; AES_cbc_encrypt(plaintext, ciphertext, sizeof(plaintext), &aes_key, iv, AES_ENCRYPT);
  5. 解密数据:unsigned char decryptedtext[16]; AES_cbc_encrypt(ciphertext, decryptedtext, sizeof(ciphertext), &aes_key, iv, AES_DECRYPT);

在Android平台上,可以使用JNI(Java Native Interface)将C语言代码集成到Java代码中。具体步骤如下:

  1. 创建JNI接口文件(例如:NativeLib.java):public class NativeLib { static { System.loadLibrary("native-lib"); } public static native void encrypt(byte[] key, byte[] iv, byte[] plaintext, byte[] ciphertext); public static native void decrypt(byte[] key, byte[] iv, byte[] ciphertext, byte[] decryptedtext); }
  2. 创建JNI实现文件(例如:native-lib.c):#include <jni.h> #include <openssl/aes.h> JNIEXPORT void JNICALL Java_com_example_NativeLib_encrypt(JNIEnv *env, jclass clazz, jbyteArray jkey, jbyteArray jiv, jbyteArray jplaintext, jbyteArray jciphertext) { jbyte *key = (*env)->GetByteArrayElements(env, jkey, NULL); jbyte *iv = (*env)->GetByteArrayElements(env, jiv, NULL); jbyte *plaintext = (*env)->GetByteArrayElements(env, jplaintext, NULL); jbyte *ciphertext = (*env)->GetByteArrayElements(env, jciphertext, NULL); AES_KEY aes_key; AES_set_encrypt_key((unsigned char *)key, 128, &aes_key); AES_cbc_encrypt((unsigned char *)plaintext, (unsigned char *)ciphertext, sizeof(plaintext), &aes_key, (unsigned char *)iv, AES_ENCRYPT); (*env)->ReleaseByteArrayElements(env, jkey, key, 0); (*env)->ReleaseByteArrayElements(env, jiv, iv, 0); (*env)->ReleaseByteArrayElements(env, jplaintext, plaintext, 0); (*env)->ReleaseByteArrayElements(env, jciphertext, ciphertext, 0); } JNIEXPORT void JNICALL Java_com_example_NativeLib_decrypt(JNIEnv *env, jclass clazz, jbyteArray jkey, jbyteArray jiv, jbyteArray jciphertext, jbyteArray jdecryptedtext) { jbyte *key = (*env)->GetByteArrayElements(env, jkey, NULL); jbyte *iv = (*env)->GetByteArrayElements(env, jiv, NULL); jbyte *ciphertext = (*env)->GetByteArrayElements(env, jciphertext, NULL); jbyte *decryptedtext = (*env)->GetByteArrayElements(env, jdecryptedtext, NULL); AES_KEY aes_key; AES_set_decrypt_key((unsigned char *)key, 128, &aes_key); AES_cbc_encrypt((unsigned char *)ciphertext, (unsigned char *)decryptedtext, sizeof(ciphertext), &aes_key, (unsigned char *)iv, AES_DECRYPT); (*env)->ReleaseByteArrayElements(env, jkey, key, 0); (*env)->ReleaseByteArrayElements(env, jiv, iv, 0); (*env)->ReleaseByteArrayElements(env, jciphertext, ciphertext, 0); (*env)->ReleaseByteArrayElements(env, jdecryptedtext, decryptedtext, 0); }
  3. 在Java代码中调用JNI方法:byte[] key = "0123456789abcdef".getBytes(); byte[] iv = "fedcba9876543210".getBytes(); byte[] plaintext = "Hello, World!".getBytes(); byte[] ciphertext = new byte[16]; byte[] decryptedtext = new byte[16]; NativeLib.encrypt(key, iv, plaintext, ciphertext); NativeLib.decrypt(key, iv, ciphertext, decryptedtext);

以上是使用openssl库在C语言和Android平台上实现AES/CBC加解密的基本步骤。在实际应用中,可以根据具体需求进行参数配置和错误处理。腾讯云提供了一系列与加密相关的产品和服务,例如云加密机、密钥管理系统等,可以帮助用户更好地保护数据安全。具体详情请参考腾讯云加密服务官方文档:腾讯云加密服务

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

php接口如何openssl_encrypt 使用 aes和des ,base64加密解密总结「建议收藏」

语言做 DES 加密解密经常会出现问题,往往是填充方式不对、编码不一致或者加密解密模式没有对应上造成。 常见填充模式有: pkcs5、pkcs7、iso10126、ansix923、zero。...ECBCBC加解密 php7.2版本用openssl_encrypt代替mcrypt_encrypt,导致以往自己写Aes加密类不能用。...这次项目客户端用AES-128-ECB 加密,我用在线AES工具来测试,发现自己写加解密方法得到值不一样。而最终发现是加密key不是16位长,导致ios客户端服务器php加解密不一致。...($str,"AES-128-ECB",$this->key,OPENSSL_RAW_DATA)); } } 若你是采用CBC加密,则还需排序$iv偏移量,如下面是AES-128-CBC加解密类...($str,"AES-128-CBC",$this->key,OPENSSL_RAW_DATA, $this->iv)); } } 参考: https://www.jianshu.com/

1.7K10

20.3 OpenSSL 对称AES加解密算法

OpenSSL库提供了对AES加密支持,但在使用时读者还是需要自行封装一些通用加解密函数,如下代码片段是笔者常用一些函数总结,其中aes_cbc_encrypt函数用于使用CBC模式对特定字符串加密...,aes_cbc_decrypt则使用CBC模式对字符串进行解密,第二个函数AES函数则是使用OpenSSL库默认加解密函数二次封装实现。...openssl/crypto.h>#include extern "C"{#include }#pragma comment(lib,...}}有了上述算法封装,接下来笔者将依次演示这几种不同加密函数是如何被应用,首先简单介绍一下aes_cbc_encryptaes_cbc_decrypt这两个函数都是自己封装AES加解密算法,这两个算法参数传递保持一致...实现对数据加解密处理功能,如下是这段代码输出效果;图片第二种调用方式是采用API实现,其中AES函数,通过AES_set_encrypt_key设置加密密钥,并直接调用AES_encrypt实现数据加密

78240

20.3 OpenSSL 对称AES加解密算法

OpenSSL库提供了对AES加密支持,但在使用时读者还是需要自行封装一些通用加解密函数,如下代码片段是笔者常用一些函数总结,其中aes_cbc_encrypt函数用于使用CBC模式对特定字符串加密...,aes_cbc_decrypt则使用CBC模式对字符串进行解密,第二个函数AES函数则是使用OpenSSL库默认加解密函数二次封装实现。... #include extern "C" { #include } #pragma comment...aes_cbc_decrypt这两个函数都是自己封装AES加解密算法,这两个算法参数传递保持一致,第一个参数都是指定需要加密缓冲区,第二个参数则是指定加密所使用key,第三个参数是处理后结果。...实现对数据加解密处理功能,如下是这段代码输出效果; 第二种调用方式是采用API实现,其中AES函数,通过AES_set_encrypt_key设置加密密钥,并直接调用AES_encrypt实现数据加密

58870

PHP 迁移 Mcrypt 至 OpenSSL 加密算法详解

对称加解密算法中,当前最为安全AES 加密算法(以前应该是是 DES 加密算法),PHP 提供了两个可以用于 AES 加密算法函数簇:Mcrypt 和 OpenSSL。...其中 Mcrypt 在 PHP 7.1.0 中被 Deprecated,在 PHP 7.2.0 中被移除,所以即可起你应该使用 OpenSSL 来实现 AES 数据加解密。...下文中我们将分别使用 Mcrypt 和 OpenSSL 来实现 AES-128/192/256-CBC 加解密,二者同步加解密要点为: 1、使用何种填充算法。...协同好以上两点,就可以让 Mcrypt 和 OpenSSL 之间一致性对数据进行加解密AES 概述 AES 是当前最为常用安全对称加密算法,关于对称加密这里就不在阐述了。...这里给出如何使用 mcrpyt 做标注 AES-128/192/256 加解密 AES-128-CBC = mcrpyt(cipher MCRYPT_RIJNDAEL_128 + key 16位 +

1.6K21

PHP AES加解密:用代码为数据加上保护盾牌

这就像是拥有一把轻巧利刃,能够轻松地进行数据加解密操作。 PHP中AES加解密 了解了AES基本概念和优势后,我们来深入探讨PHP中如何使用AES进行加解密。...以下是一个简单例子,演示了如何使用PHP对字符串进行AES加解密操作。 步骤1:安装 OpenSSL 扩展 在使用AES之前,确保你PHP环境中已经安装了OpenSSL扩展。...你可以在php.ini文件中启用它,或者通过以下命令行安装: sudo apt-get install php-openssl 步骤2:编写AES加解密函数 <?...decryptAES($data, $key, $iv) { $cipher = "<em>aes</em>-256-<em>cbc</em>"; $options = 0; $decrypted = openssl_decrypt...文件加解密 除了对字符串进行加解密AES还可以用于文件加解密

27910

支付平台架构:终端安全技术实现

------ 本文选自《支付平台架构:业务、规划、设计实现》一书,将详细介绍支付平台终端安全技术实现。...在Android系统中Base64(完整类名为android.util.Base64)已经是一种内置工具类编码转换算法,很多人都把Base64当成一个加解密算法,但从严格意义上来说,它不能算是一种加解密算法...在Android系统上使用AES使用DES实现难度、代码量和写法相差无几,比DES速度更快、性能更高,在实际开发过程中建议采用AES算法对数据进行加解密,其加密代码如下: 1/** 2     ...RSA 一般只适用于小数据块加解密场景中(例如加密动态密钥、短关键数据),加解密速度较AES和DES慢。 传输安全 数据传输安全需要满足以下条件。...《支付平台架构:业务、规划、设计实现》一书梳理支付平台各个业务和技术细节,讲解支付架构原理和技术实现。既有支付领域端到端全链路设计思路,也有关键技术方案实现细节和经验总结。

95220

实战篇-OpenSSLAES加密算法-CFB1模式

实战篇-OpenSSLAES加密算法-CFB1模式 一、AES简介 二、CFB1模式 1、命令行操作 2、函数说明 3、编程实现 (1)特别注意 (2)实现CFB1模式加解密 (3)测试代码 一、AES...经过五年甄选流程,高级加密标准由美国国家标准技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效标准。...2006年,高级加密标准已然成为对称密钥加密中最流行算法之一。 AES属于对称加密算法,加解密使用同一个秘钥。 对称加密算法,一般有至少4种模式,即ECB、CBC、CFB、OFB等。...具体加密原理,就不进行介绍了,本文主要从使用角度,进行说明。 以下命令行和编程实现,均基于OpenSSL开源库。在命令行中,我们可以使用命令实现对文件加解密,以验证我们编程实现,是否正确。...); 参数名称 含义 in 输入数据,长度任意 out 输出数据,长度输入数据相等 length 输入数据位数,即输入数据长度*8 key 使用AES_set_encrypt_key

1.5K10

JAVAPHP之间进行aes加密解密

aes加密解密过程 用户数据应经过加密再传输,此文档为aes128加密(cbc模式)说明 摘要算法为SHA-512 加密: 生成16位iv向量,使用该iv以及密钥加密原文 将加密后真实密文iv拼接...: iv+真实密文 将与iv拼接后密文用SHA-512 HMAC生成摘要信息(128位),密文拼接: HMAC+base64后密文,得到最终密文 解密: 分离出hmac密文,可以自行进行摘要检测...(str, 'AES-128-CBC', key, 0, iv); secert_str = iv . //5.base64_encode 考虑语言兼容性问题,该步骤取消...(data, 'AES-128-CBC', key, 0, iv); java加解密类 package main; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec..."); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");//aes-cbc-pkcs5(pkcs5pkcs7通用)

2.5K10

讲讲网络模块中加解密那点儿事--AES+BASE64提问理论代码

之所以想写这篇,是因为,最近被抽过去帮忙做一个 C++ 项目,在 Android 中,各种编解码、加解密算法官方都已经封装好了,我们要使用非常方便,但在 C++ 项目中很多都要自己写。...基于以上种种,目前较为常见 app 服务端交互一套加解密、编解码流程就是:UTF-8 + AES + BASE64 ?...C++ c++ 坑爹地方就在于,这整个流程,包括 UTF-8 编解码、AES 加解密、BASE64 编解码都得自己写。...aes.MakeKey(string(AES_KEY).c_str(), string(AES_IV).c_str(), 16, 16); //这里参数有传入指定加解密模式,AES::CBC,...aes.MakeKey(string(AES_KEY).c_str(), string(AES_IV).c_str(), 16, 16); //这里参数有传入指定加解密模式,AES::CBC

91130

让大象起舞第一弹---HTTPS计算性能

比如RSA, Diffie-Hellman, ECDHE.这类算法主要作用就是根据客户端和服务端不对称信息,经过高强度密钥生成算法,生成对称密钥,用于加解密后续应用消息。 对称加解密。...256 192| 7680| 384 256| 15360| 521 对称加密算法 对称加密算法就是使用相同密钥对数据进行加解密,常用对称加密算法如下: 算法名 主要数学运算 优点 缺点 AES_...128_CBC XOR 实现简单,运行速度k 无MAC功能 AES_128_GCM XOR 有MAC功能 实现复杂,运行速度相比CBC慢 RC4 XOR 实现简单,运行速度快 不推荐使用,已经不安全...算法名 每秒处理字节数(块大小为1K) 处理4K字节需要时间 aes-128 cbc 117499.22k 0.00003s aes-192 cbc 97594.71k 0.00004s...aes-256 cbc 83456.68k 0.000047s SHA1 488445.95k 0.000008s SHA256 193084.22k 0.00002s RC4 623545.69k

96820
领券