`

AES 加密及兼容

 
阅读更多

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

AES/CBC/NoPadding                  16                         不支持
AES/CBC/PKCS5Padding             32                         16
AES/CBC/ISO10126Padding        32                          16
AES/CFB/NoPadding                    16                          原始数据长度
AES/CFB/PKCS5Padding              32                          16
AES/CFB/ISO10126Padding         32                          16
AES/ECB/NoPadding                    16                          不支持
AES/ECB/PKCS5Padding              32                          16
AES/ECB/ISO10126Padding         32                          16
AES/OFB/NoPadding                     16                          原始数据长度
AES/OFB/PKCS5Padding               32                          16
AES/OFB/ISO10126Padding          32                          16
AES/PCBC/NoPadding                   16                          不支持
AES/PCBC/PKCS5Padding             32                          16
AES/PCBC/ISO10126Padding        32                          16
可 以看到,在原始数据长度为16的整数倍时,假如原始数据长度等于16*n,则使用NoPadding时加密后数据长度等于16*n,其它情况下加密数据长 度等于16*(n+1)。在不足16的整数倍的情况下,假如原始数据长度等于16*n+m[其中m小于16],除了NoPadding填充之外的任何方 式,加密数据长度都等于16*(n+1);NoPadding填充情况下,CBC、ECB和PCBC三种模式是不支持的,CFB、OFB两种模式下则加密 数据长度等于原始数据长度。          

http://download.oracle.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html#AppA

 

http://blogs.msdn.com/b/dotnetinterop/archive/2005/01/24/java-and-net-aes-crypto-interop.aspx

Q. You used PKCS5 padding for Java and PKCS7 for .NET. What gives? 
A. They are the same for block sizes up to... I think... 256. Since we did block sizes of 128, they are completely the same. Fully interoperable.

分享到:
评论

相关推荐

    java .net AES加密不兼容问题:

    总之,解决Java和.NET之间的AES加密不兼容问题需要深入理解加密原理和两个平台的API细节。通过统一配置、明确IV和密钥管理,可以有效地实现跨平台的兼容性。对于开发者来说,了解这些差异并能灵活应对,是提升系统...

    Delphi.rar_AES_AES加密_delphi AES加密_delphi 加解密_java delphi aes

    本资源"Delphi.rar_AES_AES加密_delphi AES加密_delphi 加解密_java delphi aes"提供的是在Delphi编程环境中实现AES加密和解密的示例代码,其目标是与Java平台上的加解密过程保持兼容。 首先,让我们深入了解一下...

    delphi7 AES 加密兼容Java

    在Java环境中,AES加密通常使用`javax.crypto`包中的类实现,例如`Cipher`,`SecretKeySpec`和` IvParameterSpec`。步骤如下: 1. 导入库:在Java代码中引入必要的加密库。 2. 创建密钥和IV:使用`KeyGenerator`生成...

    C#写的大文件AES加密解密程序

    本项目"大文件AES加密解密程序"就是针对这一需求而设计的,适用于VS2019开发环境,可能无法在较低版本的Visual Studio中正常运行。 AES,全称为Advanced Encryption Standard,是一种广泛使用的对称加密算法,以其...

    简单AES加密demo

    标题 "简单AES加密demo" 涉及到的是一个关于数据加密的示例,主要使用了AES(Advanced Encryption Standard)算法。AES是一种广泛使用的对称密钥加密标准,它为电子数据提供了高度的安全保障。在描述中提到,这个...

    AES加密解密算法 iOS和Android完美实现

    跨平台兼容性是iOS和Android之间实现AES加密解密的一个挑战。为了确保两端的密钥一致,通常会采用Base64编码将密钥转换为字符串进行传递。同时,初始化向量IV也需要在加密时一并发送,以便解密端能够正确还原数据。...

    C语言 stm32 AES加密解密

    在STM32上实现AES加密解密,通常需要利用其内部的加密硬件模块,如CryptoCell或DMA控制器,以提高性能和效率。STM32的HAL库或LL库提供了相应的API接口,用于配置和操作这些硬件资源。然而,对于没有内置加密硬件的...

    AES加密/解密,C,java,delphi互解

    在标题中提到的"C, java, delphi互解"意味着这个压缩包内包含了用C、Java和Delphi三种编程语言实现的AES加密和解密功能,而且这些实现可以相互兼容,这意味着无论你在哪个平台上或使用哪种语言,都能对加密的数据...

    Java C# Delphi语言AES加解密兼容方案

    AES-128-ECB是一种常见的AES加密模式,它使用128位的密钥,并且在加密过程中不考虑明文块的上下文关系,即每个明文块独立加密。ECB(Electronic Codebook)模式简单高效,但不适合对大量重复数据进行加密,因为相同...

    Java实现AES加密和解密算法

    首先,了解AES加密的基本步骤: 1. **密钥生成**:AES加密需要一个密钥作为输入。在Java中,可以使用`KeyGenerator`类来生成密钥。`KeyGenerator.getInstance("AES")`创建一个AES密钥生成器,`kgen.init(128, new ...

    aes对称加密所需jar

    然而,标准的Java Development Kit(JDK)并不直接提供所有可能的AES加密模式和参数,这可能导致在某些特定项目中遇到兼容性问题。 标题"aes对称加密所需jar"暗示了这个问题:项目在尝试使用AES加密时遇到了与JDK不...

    AES加密方式实现

    普通的AES加密,以及兼容Linux以及Windows操作系统AES差异性;Android的AES假面的差异性

    vs2008C++实现AES加密解密算法

    本项目"vs2008C++实现AES加密解密算法"就是针对这一需求,使用C++编程语言在Visual Studio 2008环境下实现的一个DLL动态链接库,为用户提供AES256的加密和解密服务。 AES256是AES家族中的一种,它使用256位的密钥对...

    C# AES加密Socket通信

    1. **设置AES加密**:首先,创建一个AES加密器实例,设置密钥和初始向量。这些值需要在客户端和服务端共享,以确保解密正确。 2. **数据转换**:在发送数据前,使用AES加密器对数据进行加密。同时,为了跨平台兼容...

    AESEncryption,如何在android和ios中实现aes加密的演示.zip

    在Android和iOS之间实现AES加密的兼容性时,需要注意以下几点: - **密钥管理**:确保在两端使用相同的密钥。这可能需要通过安全的方式共享密钥,或者在客户端生成后发送到服务器,然后由服务器分发给其他客户端。...

    XE5\XE6\XE7\XE8\XE10 AES加密

    AES加密是一种广泛应用于数据安全领域的高级加密标准,全称为Advanced Encryption Standard。该标准在2001年由NIST(美国国家标准与技术研究所)发布,旨在提供一种高效且安全的加密算法,以保护敏感数据免受未经...

    [iOS]AES加密在iOS上面的实现

    CryptoKit是苹果在iOS 13及更高版本中引入的新框架,提供了现代化的加密API,而CommonCrypto则是一个更老但兼容性更强的库。 **使用CryptoKit实现AES加密** 1. **密钥生成**:首先,我们需要生成一个AES密钥。...

    PHP开发过程中AES加密解密问题 js前端AES加密,PHP解密

    AES加密通常与JavaScript结合使用,以便在客户端进行数据预处理,然后在服务器端进行解密。这有助于防止在数据传输过程中被窃取。本篇文章将深入探讨如何在JavaScript前端实现AES加密,并在PHP后端进行解密。 **AES...

    AES加密和解密Demo

    本教程将通过"AES加密和解密Demo"这个实例,深入探讨AES的工作原理、实现过程以及如何在实际应用中进行加密和解密。 **AES加密算法简介** AES是由比利时密码学家Joan Daemen和Vincent Rijmen设计的,2001年被美国...

    纯C实现的aes加密算法

    总的来说,纯C实现的AES加密算法为开发者提供了一种灵活且自包含的加密解决方案,适用于资源有限的环境或需要跨平台兼容性的场景。在实际应用中,可以结合其他安全机制,如HMAC(哈希消息认证码)来增强数据完整性,...

Global site tag (gtag.js) - Google Analytics