java语言,如何实现AES加密(ZeroPadding)

文件加密与解密技术实战:使用Java实现AES/CBC/PKCS5Padding加密算法 使用Java实现AES/CBC/PKCS5Padding加密解密文件,保护数据安全。本文通过详细解析FileEncryptDecryptUtil类,展示了加密解密过程,强调了密钥管理、初始化向量(IV)使用的重要性,以及文件I/O操作的实现。提醒生产环境应采用安全密钥存储,优化大文件处理,并实施全面错误管理。掌握此工具,为文件安全保驾护航。 阅读详情

public class AesUtils {

private static final String AES_MODE = "AES/ECB/NoPadding";
private static final int BLOCK_SIZE = 16;
private byte[] key=null;

private static byte[] generateKey() {
    //结尾0等同于C++字符串结尾的\0
    String strKey=“1234567890123450”;
    byte[] keyBytes = new byte[16];
    keyBytes  = strKey.getBytes(StandardCharsets.UTF-8);
    return keyBytes;
}

// ZeroPadding
private static byte[] zeroPad(byte[] data) {
    if (data.length % BLOCK_SIZE == 0) {
        return data;
    }
    int paddedLength = ((data.length + BLOCK_SIZE - 1) / BLOCK_SIZE) * BLOCK_SIZE;
    return Arrays.copyOf(data, paddedLength);
}

private static String delZero(byte[] decrypted) {
    int length = decrypted.length;
    while (length > 0 && decrypted[length - 1] == 0) {
        length--;
    }
    return new String(decrypted, 0, length, StandardCharsets.UTF_8);
}

public static String encrypt(String plainText) {
    try {
        byte[] key = generateKey();
        byte[] plainBytes = plainText.getBytes(StandardCharsets.UTF_8);
        byte[] padded = zeroPad(plainBytes);

        SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
        Cipher cipher = Cipher.getInstance(AES_MODE);
        cipher.init(Cipher.ENCRYPT_MODE, keySpec);
        
        byte[] encrypted = cipher.doFinal(padded);
        return Base64.getEncoder().encodeToString(encrypted);
    } catch (Exception e) {
        throw new RuntimeException("AES加密失败", e);
    }
}

public static String decrypt(String base64Cipher) {
    try {
        byte[] key = processKey("");
        byte[] encrypted = Base64.getDecoder().decode(base64Cipher);

        SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
        Cipher cipher = Cipher.getInstance(AES_MODE);
        cipher.init(Cipher.DECRYPT_MODE, keySpec);
        
        byte[] decrypted = cipher.doFinal(encrypted);
        return delZero(decrypted);
    } catch (Exception e) {
        throw new RuntimeException("AES解密失败", e);
    }
}

}

Java中AES算法的使用方式以及CBC和ECB两种工作模式 ECB是最简单的AES加密模式,这种一对一的加密方式会导致安全性降低。3、使用SecretKey,IvParameterSpec初始化Cipher实例,并设置加密模式或解密模式。显而易见,AES是不二之选。ECB是最简单的AES加密模式,它需要一个固定的秘钥,固定的明文会产生固定的密文。2、根据算法名称初始化一个SecretKey实例,秘钥必须是指定长度。秘钥的长度决定加密长度,工作模式和填充模式可以看成是对称加密算法的参数和格式选择。DES算法由于秘钥长度较短,可以在短时间内暴力破解,所以已经不安全了。 阅读详情

相关推荐

Java AES加密如何使用zeropadding方式填充

前一久,在对接支付通道时,遇到上游使用AES加密方式,对方要求加密时使用CBC模式,zeropadding填充,偏移量为0000*4(即16个0),输出十六进制,字符集使用UTF-8。 本以为也没什么问题,可到实际开发时却发现Java虽然支持AES的CBC模式,但填充方式却没有zeropadding模式。通过查看文档,先梳理一下加密算法相关的知识。 JDK1.8支持的加密算法: Cipher......

OrangeJack的专栏 3万+

AES/ECB/PKCS5Padding加解密

注意事项(代码最后附上): 1.测试网站:http://tool.chacuo.net/cryptaes 2.代码中最后的main方法为测试方法,展现了两种输出方式,即base64和hex。 3.java中有效密码为16位/24位/34位,其中如果想使用24位/32位的密码进行加密,需要下载对应jdk的JCE(Java密码扩展无限制权限策略文件),将对应的local_policy.jar和US_export_policy.jar放到%JDK_HOME%\jre\lib\security下,即替换原有两个文件

weixin_44613100的博客 1万+

Java解决AES加密解密 ( AES/ECB/PKCS5Padding )

JAVA解决AES ECB 模式下加密解密;附加国内三方AES加密网站---http://tool.chacuo.net/cryptaes;如有用解决您工作问题,烦请点个赞

aes加密/解密,cbc模式PKCS#5 padding填充方式

AES(高级加密标准)是一种广泛使用的对称密钥加密算法。

csdndys的博客 1万+

港口集装箱码头运营FlexSim仿真

列队4中的集装箱会根据不同类型的集装箱会放置在不同的堆场,因此根据前面对集装箱设置的标签Type的数值不同,设置不同的发送端口。集装箱到达列队3后,会有70%的集装箱到达堆场,30%的集装箱运出港口,因此在Queue列队3的Flow界面设置按照百分比发送端口,其中70%发送到端口1,即发送到列队4等待进入堆场,30%发送到端口2,即发送至出闸口。通过上述对比表格可以看出,当集卡数量在10的时候,岸桥和场桥的设备利用率达到了最高,当集卡数量为12的时候场桥1和场桥3的利用率有所下降,因此综合考虑。

m0_72514516的博客 1331

Nginx健康检查实战:如何用第三方模块提升服务可用性(附详细配置)

本文深入探讨了如何通过集成第三方健康检查模块来提升Nginx的服务可用性。文章对比了Nginx默认被动检查的局限性,并详细介绍了主动健康检查的核心优势、主流模块选型,以及以nginx_upstream_check_module为例的实战部署与配置指南,帮助运维人员构建更可靠的负载均衡架构。

weixin_28331555的博客 308

aes加密算法python语言实现_C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]...

原文:http://outofmemory.cn/code-snippet/35524/AES-with-javascript-java-csharp-python-or-phpc#里面的AES加密解密在visual studio中写的c#代码usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;...

weixin_39890814的博客 328

OpenWrt虚拟机磁盘扩容实战:从SquashFS到ext4的完整避坑指南

本文详细介绍了OpenWrt虚拟机磁盘扩容的完整流程,重点对比了SquashFS和ext4文件系统在扩容操作上的关键差异。通过五步安全迁移法和直接分区调整方案,帮助用户有效解决磁盘空间不足问题,同时提供高级技巧和故障排除指南,确保扩容过程顺利无坑。

weixin_29251131的博客 232

C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]

原文:http://outofmemory.cn/code-snippet/35524/AES-with-javascript-java-csharp-python-or-php c#里面的AES加密解密 在visual studio中写的c#代码 using System; using System.Collections.Generic; using System...

acjxe44224的专栏 475

老N卡福音:GT1030/GTX1050在MacOS Ventura 13.2上的完整驱动指南(附实测截图)

本文详细介绍了如何在MacOS Ventura 13.2上通过OCLP工具链驱动GT1030和GTX1050等老款NVIDIA显卡,涵盖硬件兼容性验证、BIOS设置、OpenCore配置、驱动安装及性能测试全流程。实测数据显示,这些基于Pascal和Maxwell架构的显卡在当代MacOS系统中仍能发挥实用价值,为老N卡用户提供完整解决方案。

weixin_30832143的博客 633

机器学习——径向基函数(RBF)神经网络

目录 一、什么是基函数 二、什么是径向基函数 三、为什么RBF神经网络使用一个径向基函数作为隐含层的激活函数 四、参数训练 五、RBF网络vs BP网络和 SVM 一、什么是基函数 著名的傅里叶变换是指:n个有参(权值)的正、余弦三角函数基的和式可以等价的表示任意一个周期函数,这里的“基”和我们数学中说的坐标基或向量基含义相同,即坐标空间中任意一个向量都可以用基向量的线性和表示出来。 因此,我们引入函数空间的概念,函数空间中的每个连续函数可以表示为基函数的线性组合,就像向量空间中的每..

CHWB2580的博客 6272

PHP、Java、.Net和Javascript的AES加密解密实现

# PHP篇 <?php $privateKey = "1234567812345678"; $iv = "1234567812345678"; $data = "Test String"; //加密 $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $privateKey, $data, MC

飞哥的资料库 978

ASPICE标准快速掌握「总目录」

欢迎大家来到雪云飞星的《ASPICE标准快速掌握》,开始前博主先列出本专栏学习的大纲,同时这也可以作为大家学习ASPICE协议知识点的参考。本专栏可以帮助大家快速掌握如何在项目中使用ASPICE,ASPICE的学习通常仅需要半天时间左右,掌握方法后完全就可以结合快查表来指导具体项目的质量提升了。

雪云飞星的博客 3012

C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现

 在visual studio中写的c#代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Security.Cryptography; namespace test { class Class1 { st

willhuo的专栏 1591

第十六章:载板制造工艺大全

本文详细介绍了IC载板制造的完整工艺流程,主要包括开料、钻孔、孔金属化、图形形成、层压、表面处理、成型和电测8大工序。每个工序都列出了关键参数和质量控制要点,如开料尺寸精度±0.1mm、激光钻孔孔径50-150μm、孔金属化铜厚20-30μm、图形形成线宽15μm±2μm等。文中还特别说明了MSAP工艺和沉金等特殊工艺的详细流程,以及成型精度和电测标准等关键指标。全文通过流程图和参数表格直观展示了IC载板制造的核心工艺和质量要求。

Open 185

华为用自研的MetaERP替换全球顶级的SAP ERP系统,其难度与风险远超一次普通的技术升级,它是一场战略级的、涉及业务筋骨的系统性工程

华为成功用自研MetaERP替换SAP系统,这是一项极具挑战的战略工程。面临四大难度:业务复杂度高(170多国业务)、数据迁移量大(20年历史数据)、技术集成复杂(重构生态系统)、人员适应周期长。同时伴随四大风险:业务中断、数据失真、成本超支、供应链协同问题。华为成功的关键在于:生存压力驱动的战略决心、强大的软件研发能力、以自身业务为试验场、分步实施策略。这一案例证明中国企业能攻克高端软件壁垒,但对大多数企业而言,核心系统替换需谨慎评估风险,建议采用渐进式替代策略。

金牌架构师 535

java .net 通用加密_AES加密解密php,java,javascript(js),.net(C#)多种语言通用同步实现加密、解密...

PHP代码:

weixin_42356340的博客 214

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

AES不同语言加密解密

AES加密模式和填充方式:还有其他 算法/模式/填充 16字节加密后数据长度 不满16字节加密后长度 AES/CBC/NoPadding 16 不支持 AES/CBC/PKCS5Padding 32 16...

weixin_30655219的博客 789

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

AES对称加解密

简介设计思想加密模式ECB模式(电子密码本模式:Electronic codebook)CBC模式(密码分组链接:Cipher-block chaining)CFB模式(密文反馈:Cipher feedback)OFB模式(输出反馈:Output feedback)主要参数注意JAVA实现AES/ECB/ZeroPaddingPHP实现AES/ECB/ZeroPadding.NET实现AES/EC...

weixin_34307464的博客 257

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

AES相关资料

JCE中支持AES,支持的模式和填充方式JCE中AES支持五中模式:CBC,CFB,ECB,OFB,PCBC;支持三种填充:NoPadding,PKCS5Padding,ISO10126Padding。不支持SSL3Padding。不支持“NONE”模式。其中AES/ECB/NoPadding和我现在使用的AESUtil得出的结果相同(在16的整数倍情况下)。不带模式和填充来获取AES算法的时候,

u010436741的专栏 1537

AES加密CBC模式兼容互通四种编程语言平台【PHP、Javascript、Java、C#】

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33739627的博客 207

Java AES加密 CBC模式 zeropadding填充 实现代码

下面的代码为AES加密 CBC模式,zeropadding填充,偏移量为key,输出格式为Base64的Java实现 import org.apache.commons.codec.binary.Base64; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypt...

qq_39820860的博客 8291

Java实现AES加密算法

最近恶补了一些关于加密算法的知识,然后用编程语言来实现 AES简介 高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图: 下面简单介绍下各个部分的作用与意义: 明文P 没有经过加密的数据 密钥K 用来加密明文的密码,在对称加密...

mathor的博客 2万+
上一篇: 如何限制EditText内容输入长度
下一篇: java语言实现AES/ECB/PKCS5Padding加密
女程序猿!!!
博客等级 码龄8年 34粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值