Android实现CBC加解密

Android AES加密解密 例如明文:{1,a,3,c,5,k,6,8,l,o},缺少6个字节,则可能补足为{1,a,3,c,5,k,6,8,l,o, 阅读详情

前言

CBC(Cipher-block chaining),即密码分组链接,是一种较为常用的加密模式。接下来介绍一下Android中实现CBC加解密的具体流程。

导入bcprov.jar

实现CBC加密需要用到bcprov.jar,百度网盘下载地址:
链接:https://pan.baidu.com/s/11l9HybOcizxzdaea2iiECQ
提取码:ijmz

AESCBCUtil.java

定义一个工具类AESCBCUtil,实现CBC加密、解密等方法:

package com.example.cbc;

import java.util.Locale;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.bouncycastle.util.encoders.Base64;

public class AESCBCUtil {
    //密码
    private static final String key = "aaaabbbbccccdddd";
    //iv偏移量
    private static final String iv = "0000000000000000";

    /**
     * 加密:对字符串进行加密,并返回十六进制字符串(hex)
     *
     * @param encryptStr 需要加密的字符串
     * @return 加密后的十六进制字符串(hex)
     */
    public static String encrypt(String encryptStr,String key,String iv) {
        try {
            IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes("UTF-8"));
            SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");

            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ivParameterSpec);

            byte[] encrypted = cipher.doFinal(encryptStr.getBytes());
            byte[] encode = Base64.encode(encrypted);

            String string = new String(encode);
            return string;
            //     return byte2HexStr(encrypted);
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        return null;
    }

    /**
     * 解密:对加密后的十六进制字符串(hex)进行解密,并返回字符串
     *
     * @param encryptedStr 需要解密的,加密后的十六进制字符串
     * @return 解密后的字符串
     */
    public static String decrypt(String encryptedStr,String key,String iv) {
        try {
            IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes("UTF-8"));
            SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");

            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7PADDING");
            cipher.init(Cipher.DECRYPT_MODE, skeySpec, ivParameterSpec);

            byte[] decode = Base64.decode(encryptedStr);

            //  byte[] bytes = hexStr2Bytes(encryptedStr);
            byte[] original = cipher.doFinal(decode);

            return new String(original);
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        return null;
    }

    /**
     * 十六进制字符串转换为byte[]
     *
     * @param hexStr 需要转换为byte[]的字符串
     * @return 转换后的byte[]
     */
    public static byte[] hexStr2Bytes(String hexStr) {

        /*对输入值进行规范化整理*/
        hexStr = hexStr.trim().replace(" ", "").toUpperCase(Locale.US);
        //处理值初始化
        int m = 0, n = 0;
        int iLen = hexStr.length() / 2; //计算长度
        byte[] ret = new byte[iLen]; //分配存储空间

        for (int i = 0; i < iLen; i++) {
            m = i * 2 + 1;
            n = m + 1;
            ret[i] = (byte) (Integer.decode("0x" + hexStr.substring(i * 2, m) + hexStr.substring(m, n)) & 0xFF);
        }
        return ret;
    }

    /**
     * byte[]转换为十六进制字符串
     *
     * @param bytes 需要转换为字符串的byte[]
     * @return 转换后的十六进制字符串
     */
    public static String byte2HexStr(byte[] bytes) {
        String hs = "";
        String stmp = "";
        for (int n = 0; n < bytes.length; n++) {
            stmp = (Integer.toHexString(bytes[n] & 0XFF));
            if (stmp.length() == 1)
                hs = hs + "0" + stmp;
            else
                hs = hs + stmp;
        }
        return hs;
    }

}

MainActivity.java

MainActivity.java中调用工具类AESCBCUtil的方法,进行测试数据的加解密:

package com.example.cbc;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {
    private String key = "aaaabbbbccccdddd";//密钥,必须16位
    private String content1 = "fgsrgreatrt";//待加密内容
    private String content2 = "AyKRIVDV9PSQ9gOJLQG/bw==";//待解密内容
    private String iv = "0000000000000000";//偏移量

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d("Jason", "encode result:" + AESCBCUtil.encrypt(content1, key, iv));
        Log.d("Jason", "decode result:" + AESCBCUtil.decrypt(content2, key, iv));
    }
}

运行结果

在安卓模拟器或真机上运行实现的程序,运行结果如下,成功完成了CBC加解密:
在这里插入图片描述

Android -- AES/CBC/PKCS7Padding加密解密 一、工具类Aes /** * AES128 算法 * CBC 模式 * PKCS7Padding 填充模式 * CBC模式需要添加一个参数iv * 介于java 不支持PKCS7Padding,只支持PKCS5Padding 但是PKCS7Padding 和 PKCS5Padding 没有什么区别 * 要实现在java端用PKCS7Padding填充,需要用到bouncycastl... 阅读详情

相关推荐

Android AES-CBC加密解密详解

Android 在传输数据的过程中,为了安全起见,通常会对其进行加密,今天就AES-CBC加密解密来讲解下,代码如下: import android.util.Log; import java.io.UnsupportedEncodingException; import java.security.InvalidAlgorithmParameterException; import java....

安卓兼职framework和app工程师的博客 2144

Android: 网络安全加解密

全部源码见文末。 加解密技术: 是最常用的安全保密手段,把重要的数据变为乱码加密传送,到达目的地后再用相同/不的手段进行还原解密。 安全保密 明文转换为乱码密文 在不可信的信道上传输乱码 采用相同或不同的手段还原成明文 加密,性能和安全是相对存在的 加密分类: 哈希函数——SHA256 MD5 对称加密——AES DES 非对称加密——RSA ECC Elgamal ...

手写我对你的温柔 1669

Android集成国密SM4-CBC加密实战:从BouncyCastle依赖到完整实现

在移动应用开发中,数据加密是保障信息安全的核心技术。分组加密算法通过对固定长度的数据块进行处理,结合特定工作模式与填充方案,实现对任意长度数据的加密保护。SM4作为我国自主设计的商用密码标准,采用128位分组与密钥长度,其安全性与国际通用的AES算法相当,广泛应用于金融、政务等对数据安全有严格要求的领域。在Android平台集成SM4算法时,开发者常面临原生SDK支持缺失、第三方库兼容性等工程挑战。本文聚焦SM4-CBC模式在Android中的实战应用,详细解析如何通过BouncyCastle加密库解决依赖

weixin_33711647的博客 436

AES加密及在Android中的使用(CBC可用)

AES加密及在Android中的使用AES简介在Android中使用AESAES加密(以CBC为例)AES解密 AES简介 高级加密标准(AES,Advanced Encryption Standard),是最常见的对称加密算法,对称加密是指加密和解密使用相同的密钥 在Android中使用AES AES共有5种加密模式: ECB模式(电码本模式) CBC模式(密码分组链接模式) CTR(计算器模式...

supersukun的博客 1966

Android 数据SM4传输加解密

甲方要求,数据在传输过程中要加密。

beautifulYuan的博客 4699

Android与SpringBoot跨平台SM4加解密:Hex密钥一致性解决方案

在移动应用与后端服务的数据安全交互中,对称加密是保障数据传输机密性的核心技术。其原理在于通信双方使用相同的密钥进行加解密,关键在于确保密钥材料在两端完全一致。国密SM4算法因其合规性与安全性,在国内项目中应用广泛。然而,在实际工程实践中,尤其是在Android与SpringBoot的跨平台场景下,密钥的传递与初始化常因编码、格式不一致导致加解密失败,这直接影响了功能的可用性与开发效率。为解决此痛点,本文聚焦于Hex(十六进制)字符串这一常见密钥传递格式,深入剖析了BouncyCastle库的配置、密钥的标准

weixin_29315569的博客 335

aes c android ios,PHP,Android,IOS通信之 AES128加解密案例程序

android上调用代码:mcrypt = new MCrypt();/* 加密*/String encrypted = MCrypt.bytesToHex( mcrypt.encrypt("需加密的字符") );/* 解密*/String decrypted = new String( mcrypt.decrypt( encrypted ) );PHP上调用的代码:$mcrypt = new M...

weixin_40004212的博客 246

Java与Android平台AES-128加解密实战Demo

密钥是加密系统的命脉。JCE提供了完善的密钥管理API,涵盖生成、转换、编码与存储全过程。doFinal()方法是触发填充动作的核心入口。无论是单次加密还是分段加密(update + doFinal),只要启用了填充模式,doFinal()都会负责收尾工作。// 自动填充并加密上述代码中,字符串”test message”共18字节,拆分为两块:第一块16字节,第二块2字节。此时,doFinal()检测到第二块仅2字节,需填充14字节,于是生成14个0x0E。

weixin_33481022的博客 693

Android 使用AES/CBC/PKCS7Padding 加解密字符串

今天项目中要用到这个加解密的东西,找了一天,终于弄好了,现在就记录下来

Stevefat 1万+

128-AES/CBC加解密_可用于Android

128-AES/CBC加解密。 对AES加密要求:1、CBC模式或CFB模式必须保证每次加密的IV是安全随机数。2、加密时不能使用固定的IV(如:写死在代码里,或固定在配置文件中)。

android对称加密AES-128-CBC加密的工具类-附件资源

android对称加密AES-128-CBC加密的工具类-附件资源

java aes128cbc_AES128位,CBC模式加解密

使用原因:因为在项目中,需要在与客户端(IOS,Android)交互的时候,保存一些私有信息,不被别人看到,所以,使用了比较流行的可以反向加解密的AES。PHP 源码$aes = new aes;echo $aes->aes128cbcEncrypt("11122222");echo "\n";echo $aes->aes128cbcEncrypt("中文aes演示");echo "\...

weixin_30735701的博客 1542

STM32 IAP跳转后APP卡死?别慌,手把手教你修复HAL_RCC_OscConfig时钟配置冲突

本文深入分析了STM32 IAP跳转后APP在HAL_RCC_OscConfig函数中卡死的问题,揭示了PLL时钟配置冲突的根本原因。通过详细的代码示例和分步解决方案,指导开发者正确处理STM32F1/F4系列的时钟系统二次初始化问题,确保IAP+APP架构的稳定运行。

weixin_28685287的博客 365

oracle pkcs7,[分享]Android端加解密(AES/CBC/PKCS7Padding)迁移到PC端

目前,移动端应用开发、保护、防作弊等等各个方案、方法都已经非常成熟。加密,作为最基本的数据保护机制,随处可见。如果应用程序的数据传输协议中还在发送明文数据,要么是无关紧要的协议,否则就会显得很low。从逆向的角度看问题、处理问题,有时候需要把Android应用程序中的加解密算法,迁移到PC端使用。虽然加解密算法是固定不变的,但是因为Android系统环境和PC系统环境的差异,有时候单纯的复制粘贴代...

weixin_42566108的博客 546

解决国内网页无法加载reCaptcha的方法

科普: reCaptcha是Google公司的验证码服务,方便快捷,改变了传统验证码需要输入n位失真字符的特点。reCaptcha在使用的时候是这样的: 只需要点一下复选框,Google会收集一些鼠标轨迹、网络信息、浏览器信息等等,依靠后端的神经网络判断是机器还是人,绝大多数验证会一键通过,无需像传统验证码一样。但是reCaptcha使用了google.com的域名,这个域名在国内是被墙的。所以,也就导致了官网上无法注册/登录的问题,挡住了不少人入正的脚步。 解决办法: 【第一步】安装fir

调皮李小怪博客 25万+

PSI5协议技术文档与驱动开发指南

• 供电与数据复用:ECU通过双绞线为传感器提供稳压(典型值5V-11V),同时检测线路电流变化实现数据传输。• 同步信号:ECU发送3.5V电压脉冲(上升沿触发传感器响应),用于时序同步。• 安全气囊:PSI5-P模式实现多碰撞传感器同步采样(响应时间<10ms)• CRC-3(3位):ASIL-B以上功能安全要求(如动力总成传感器)• 奇偶校验(1位):适用于低安全等级场景(如PSI5-P10P模式)• 典型应用:PSI5-P(并行总线)、PSI5-U(通用总线)

u012733413的博客 2867

Android AES加解密优化

package com.wangzhong.fortune.utils; import android.util.Base64; import com.wangzhong.fortune.GlobalConstants; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import ...

runninghui的专栏 861

antv x6 沿边图标循环动画实现

2.使用transition给边设置动画,利用complte方法实现循环动画。实现效果,如下图,边上存在两个图标,要求图标延边一直循环动画。1.注册一个自定义边,边上定义两个图标,并设置其初始位置。

lingliu0824的博客 3366

鸿蒙Next原生应用开发AES加解密

本文介绍了将Android AES加解密功能移植到鸿蒙系统的实现过程。代码展示了使用ArkTS语言开发的CipherModel类,包含AES-128 CBC模式加解密功能,支持PKCS5/PKCS7填充。主要实现字符串与Uint8Array的转换、密钥处理(截取前16字节作为密钥,后续作为IV)、基于cryptoFramework的加密/解密流程,并通过Base64进行数据编码/解码转换。使用示例展示了如何调用aesEncrypt方法进行加密操作。该实现保留了与Android版本相似的功能接口,同时适配了鸿

冰天糖葫芦的博客 416

2025目标检测新方向:弱监督目标检测的最新论文研究与应用

2025目标检测新方向:弱监督目标检测的最新论文研究与应用 ,人工智能,计算机视觉,大模型,AI,本文聚焦2025年弱监督目标检测新方向,阐述其基础概念,包括弱监督学习定义、标注形式及面临的定位不准等挑战。介绍最新论文研究的多种算法,如基于点标注的算法等,还涉及相关模型、应用领域,以及评价指标、数据集、实现工具框架,分析未来趋势与补充挑战及解决方案,为该领域研究提供全面参考。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 7万+

PMP--二模--解题--161-170

A:邀请团队成员在下一次回顾中分享经验。B:请求发起人增加具有所需经验的团队成员。C:在团队内计划知识共享会议。D:请求发起人为团队提供培训课程。A。

stqer的博客 1268

AES加密解密在JAVA和ANDROID下互通

昨天外包安卓的那个人说AES的加解密结果不一样,于是百度搜索发现还真是! 贴上AES加密核心: Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv); CBC是工作模式,AES一共有电子密码本模式(ECB)、加密分组链接模式(

u010161082的专栏 3359

华为OD机试真题 新系统 2026-09-06 Python&JS【仓储货物有序出库】

某仓储中心有一个货物堆放区,货物编号按乱序堆叠存放,只能从顶部取货,管理员需要将货物按编号从小到大取出。

MISAYAONE的博客 114

AES对称加密使用方式与浅析

首先,AES的加解密算法来自于OpenSSL库,Android系统已经集成了这个算法,Java中可以直接导入类,在Android系统的native层中c和c++的使用时也可以直接从系统库中链接到OpenSSL库(NDK使用和c++是一样的,都是在Android.mk或者CMakeLists.txt中链接),关于头文件 因为使用的是系统库,因此可以直接include,当然自己编的库那就一定要有头文件了,可以从OpenSSL官网获取,**还有一个问题**:如果加解密时需要用到base64去编解码,那就得自己编库

dream_caoyun的博客 3015

深度学习-161-Dify工具之对比使用工作流和聊天流生成图表可视化的html文件

分别使用聊天流和工作流进行数据分析结果的可视化,生成html文件。聊天流可以配置带记忆,这样就可以多次交互优化结果。

qq_20466211的博客 1709

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Android NDK集成OpenSSL实现AES加解密:从原理到工程实践

对称加密是数据安全领域的核心技术,它使用同一密钥进行加密和解密,确保信息传输的机密性。AES(高级加密标准)作为当前最主流的对称加密算法,其原理基于多轮替换和置换的迭代运算,在安全性和效率之间取得了良好平衡。在工程实践中,直接调用成熟的密码学库是保障实现正确性和性能的最佳路径。对于Android平台上的高性能数据保护需求,例如处理金融交易或隐私信息,将OpenSSL这一工业级密码学引擎与C++核心模块结合,通过NDK集成到移动应用中,能够为本地敏感数据提供高强度加密。本文聚焦于AES-256-CBC模式与P

weixin_34321753的博客 340

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

上一篇: Android实现ECB加解密
下一篇: Android导入jar包方法
Jason_Flash
博客等级 码龄7年 1万+粉丝 51原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值