Android实现ECB加解密

Android 数据SM4传输加解密 甲方要求,数据在传输过程中要加密。 阅读详情

前言

在Android开发中,出于安全考虑,常常需要对字段进行加密或解密,以下为Android实现ECB(Electronic Codebook,电码本)加解密的具体代码。

AESUtils.java

定义一个AESUtils类,实现加密、解密等方法:

package com.example.ecb;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class AESUtils {
    /**
     * 密钥算法
     */
    private static final String ALGORITHM = "AES";
    /**
     * 加解密算法/工作模式/填充方式
     */
    private static final String ALGORITHM_STR = "AES/ECB/PKCS5Padding";

    /**
     * SecretKeySpec类是KeySpec接口的实现类,用于构建秘密密钥规范
     */
    private SecretKeySpec key;

    public AESUtils(String hexKey) {
        key = new SecretKeySpec(hexKey.getBytes(), ALGORITHM);
    }

    /**
     * AES加密
     * @param data
     * @return
     * @throws Exception
     */
    public String encryptData(String data) throws Exception {
        Cipher cipher = Cipher.getInstance(ALGORITHM_STR); // 创建密码器
        cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
        return Base64.getEncoder().encodeToString(cipher.doFinal(data.getBytes()));
    }

    /**
     * AES解密
     * @param base64Data
     * @return
     * @throws Exception
     */
    public String decryptData(String base64Data) throws Exception{
        Cipher cipher = Cipher.getInstance(ALGORITHM_STR);
        cipher.init(Cipher.DECRYPT_MODE, key);
        return new String(cipher.doFinal(Base64.getDecoder().decode(base64Data)));
    }

    /**
     * hex字符串 转 byte数组
     * @param s
     * @return
     */
    private static byte[] hex2byte(String s) {
        if (s.length() % 2 == 0) {
            return hex2byte (s.getBytes(), 0, s.length() >> 1);
        } else {
            return hex2byte("0"+s);
        }
    }

    private static byte[] hex2byte (byte[] b, int offset, int len) {
        byte[] d = new byte[len];
        for (int i=0; i<len*2; i++) {
            int shift = i%2 == 1 ? 0 : 4;
            d[i>>1] |= Character.digit((char) b[offset+i], 16) << shift;
        }
        return d;
    }
}

MainActivity.java

MainActivity.java中使用AESUtils类的方法,对测试数据进行加解密:

package com.example.ecb;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import com.example.ecb.AESUtils;

public class MainActivity extends AppCompatActivity {
	private String key = "aaaabbbbccccdddd";//密钥
	private String data1 = "btI0LsoveoZ0C58fF4JTRw==";//待解密数据
	private String data2 = "faergtrf";//待加密数据

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //解密测试:
        AESUtils util = new AESUtils(key);
        try {
            Log.d("Jason", "decode result:"+ util.decryptData(data1)); //
        } catch (Exception e) {
            e.printStackTrace();
        }
        //加密测试:
        AESUtils util2 = new AESUtils(key);
        try {
            Log.d("Jason", "encode result:" + util2.encryptData(data2));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

运行结果

在安卓虚拟机或真机上运行程序,logcat中显示的log如下,成功完成了加解密:
在这里插入图片描述

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

相关推荐

Android AES的ECB和CTR加解密代码实现,不看绝对血亏

ECB是在对称加密的基础上,将原文分成若干个段,对每个段进行加密,每个段的输出结果 合起来就是最后的密文,最后的密文一般用 Base64 输出 在Android中的实现就是先导入: implementation ‘org.apache.shiro:shiro-core:1.2.2’ 这个包最新的Android导入会出现 一样的类Load不了,我懒得解决,就换成低版本的包了。 这边CTR用的是PKS5Padding填充,也就是你 原文的bytes不是8或者16的倍数,会自动帮你用pks5填充 而ECB是N.

m0_65145685的博客 798

Android AES的ECB和CTR加解密代码实现,这些面试官常问的开发面试题你都掌握好了吗

@param iv 加密的偏移量 @return 输出Hex十六进制再次加密的结果 **/ public static String encryptCRT(byte[] content, String key, String iv) { String encodeStr = “”; try { //产生密钥 byte[] keyBytes = key.getBytes(); SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes..

m0_64382868的博客 443

Android AES加解密实战:从ECB到CTR模式详解与安全实现

对称加密是数据安全的基础,其中AES(高级加密标准)作为国际公认的算法,通过分组密码机制对数据进行块处理。其核心原理在于使用固定长度的密钥对128位数据块进行多轮替换和置换,确保信息的机密性。在工程实践中,选择合适的工作模式至关重要,例如ECB模式虽然简单但存在安全隐患,而CTR模式则通过计数器生成密钥流,实现了并行处理且无需填充,更适合现代应用场景。对于Android开发者而言,结合JCA的Cipher类与Android Keystore系统,可以构建健壮的本地数据保护方案,有效应对SharedPrefe

weixin_33978578的博客 334

Android AES的ECB和CTR加解密代码实现

简而言之: CTR是在对称加密的基础上,对原文填充偏移解密后的输出结果和原文再异或 得到密文,一般结果用十六进制输出 ECB是在对称加密的基础上,将原文分成若干个段,对每个段进行加密,每个段的输出结果 合起来就是最后的密文,最后的密文一般用 Base64 输出 在Android中的实现就是先导入: implementation 'org.apache.shiro:shiro-core:1.2....

RikkaTheWorld 1358

Java与C/C++通用的“AES/ECB/PKCS5Padding”实现

在Java中调用AES的加解密方法很简单,因为系统提供了很好的函数支持;但在C/C++中需要用户自己实现,因此需要学习AES加密的不同实现方式,以便正确的实现。

ruyi366的专栏 5867

Flutter之AES加解密

最近在关注Flutter的发展,Flutter正式版本1.9最近也发布了,感觉这个新知识有必要了解和学习下,以适应大前端的发展,分享下最新学习的成果。 最近由于在关注加解密的话题,搜索了Flutter插件包中关于加解密的插件包,发现有一些比较流行的,封装的也比较好,但是对于开发者来说,总觉得和实际项目难以对应,所以学习插件自定义我试着开发了一款关于AES加密,项目地址如下flutter_aes_e...

不二的专栏 1万+

支持Android和PC的DES、SM4的ECB模式的加解密

代码在Android端和PC端均已验证过 测试数据为16进制,Base64自己转 一、效果图 二、代码 DES的实现 1、手动实现 /** * DES算法的ECB模式的加密、解密 * 注意:ECB模式下没有IV(偏移量) * 注意:因为使用的填充模式是NoPadding,参数传入前判断是否对齐,否则异常 * * @param dataBytes 如果是加密则代表明文,如果是解密则代表密文 * @param keyBytes 密钥 * @param mode 加

李小伟其实很菜 3486

Java与Winform进行AES加解密数据传输的工具类与对应关系和示例

上面讲的Java与安卓进行数据传输时使用AES加解密的示例工具类。如果Java需要与其他第三方平台比如Winform程序进行数据传递时也需要数据加解密。

BADAO_LIUMANG_QIZHI的博客 870

2024年Android最全Android AES的ECB和CTR加解密代码实现,安卓面试宝典

各行各样都会淘汰一些能力差的,不仅仅是IT这个行业,所以,不要被程序猿是吃青春饭等等这类话题所吓倒,也不要觉得,找到一份工作,就享受安逸的生活,你在安逸的同时,别人正在奋力的向前跑,这样与别人的差距也就会越来越遥远,加油,希望,我们每一个人,成为更好的自己。BAT大厂面试题、独家面试工具包,资料包括 数据结构、Kotlin、计算机网络、Framework源码、数据结构与算法、小程序、NDK、Flutter。

2401_84563287的博客 790

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

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

weixin_33481022的博客 693

避坑指南:ArcGIS 做莫兰指数分析,你的‘空间关系概念化’选对了吗?

本文深入解析了ArcGIS中莫兰指数分析的关键参数——'空间关系概念化'的选择策略。通过对比反距离法、固定距离法和K最近邻法的适用场景与影响机制,帮助研究者避免常见误区,提升空间自相关分析的准确性和解释力。特别针对全域莫兰指数和局域莫兰指数的计算差异提供了实用建议。

weixin_30872157的博客 805

Android AES的ECB和CTR加解密代码实现,字节Android面试必问

cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec); //加密数据 byte[] resultBytes = cipher.doFinal(content); //结果用Hex十六进制转码 encodeStr = new String(Hex.encode(resultBytes)); return encodeStr; } catch (NoSuchAlgorithmException e) { e.printStackTrac

m0_66144910的博客 233

S32K144(14)ADC

1、简介 开发板S32K144+S32DS+JLINK,裸机版的程序编写 S32K14x包含两个12位ADC模块,ADC0和ADC1 应用程序可能需要ADC的连续采样(4K采样/秒),这可能对CPU有相当大的负载。虽然使用可编程延迟块(PDB)来触发ADC可能会减少一些CPU负载,但当ADC以非常高的速率采样或PDB被绕过时,ADC支持DMA请求功能以获得更高的性能。ADC可以在转换完成时触发DMA(通过DMA请求)。TRGMUX会根据不同的应用需求,使用软件为用户提供更灵活的DMA触发方案,例如,可

朗朗上口就行啦的博客 1万+

Android AES的ECB和CTR加解密代码实现,面试阿里的时候一定会问到的

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的24套腾讯、字节跳动、阿里、百度2019-2021BAT 面试真题解析,我把大厂面试中常被问到的技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。还有 高级架构技术进阶脑图 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。Android 基础知识点Java 基础知识点Android 源码相关分析常见的一些原理性问题。

m0_60147147的博客 725

python 抖音采集_python爬取抖音视频的实例详解

import requestsimport jsonimport reimport osfrom pprint import pprint as ppimport queueclass DouYin:header = {'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*...

weixin_35795675的博客 1864

Cadence PCB仿真使用Allegro PCB SI S参数配置方法图文教程

S参数即S-Parameter是指散射参数,描述信号在传输线中的正反向传输和正反向反射的情况。本文讲述在使用Allegro PCB SI进行信号完整性仿真前,S参数的配置方法。

fydar的博客 2177

Android实现AES加密

public class AESUtils { private static final String TAG = AESUtils.class.getSimpleName(); /** * 采用AES加密算法 */ private static final String KEY_ALGORITHM = "AES"; /** * 字符编码(用哪个都可以,要注意new String()默认使用UTF-8编码 getBytes()默认使用IS.

_陈泡泡的博客 7334

Qt/C++ 音视频开发 - FFmpeg 安卓版

通过将 FFmpeg 集成到 Qt/C++ 项目中,我们可以实现强大且灵活的音视频处理功能。本文介绍了在安卓平台上使用 FFmpeg 的基本步骤,包括初始化、解码、处理和编码等。实际应用代码示例展示了如何在安卓设备上播放视频。

走向CTO的路上... 1190

深入解析 AES 加密算法:原理、变体与 LibTomCrypt 在 Android 中的实战应用

在 LibTomCrypt 中,AES 算法的 S-Box(替代盒)是通过查找表(lookup table)实现的,而 AES 的表(如 S-Box)主要是存在于 src/cipher/aes/aes_tab.c 文件中。算法支持丰富:包括对称加密(AES、DES 等)、非对称加密(RSA、ECC 等)、哈希算法(SHA-256、MD5 等)理论上,你可以通过修改 LibTomCrypt 中的 S-Box 或其他查找表,来实现你自己的 AES 变体。

1182

Doris实战——结合Flink构建极速易用的实时数仓

Doris实战——结合Flink构建极速易用的实时数仓

爱吃辣条的博客 8226

论文翻译:2024 High-Confidence Computing A survey on large language model (LLM) security and privacy: The

大型语言模型(LLMs),如ChatGPT和Bard,已经彻底改变了自然语言理解和生成。它们具有深度语言理解能力、类似人类的文本生成能力、上下文意识和强大的问题解决技能,使它们在各个领域(例如搜索引擎、客户支持、翻译)中变得不可或缺。同时,LLMs也在安全领域获得了关注,揭示了安全漏洞并展示了它们在安全相关任务中的潜力。本文探讨了LLMs与安全性和隐私的交集。具体来说,我们研究了LLMs如何积极影响安全性和隐私,与它们使用相关的潜在风险和威胁,以及LLMs内部的固有漏洞。

CSPhD-winston的博客 1722
上一篇: Android根据版本号执行不同代码
下一篇: Android实现CBC加解密
Jason_Flash
博客等级 码龄7年 1万+粉丝 51原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值