PKCS5Padding与PKCS7Padding的区别
关于PKCS5Padding与PKCS7Padding的区别
跨语言平台的加密解密算法的交互使用,特别是一些标准的加解密算法,都设计到数据块Block与填充算法的
问题,例如C#与JAVA中的常见的填充算法如下:
.Net中的填充算法:
成员名称 | 说明 |
---|---|
ANSIX923 |
ANSIX923 填充字符串由一个字节序列组成,此字节序列的最后一个字节填充字节序列的长度,其余字节均填充数字零。
下面的示例演示此模式的工作原理。假定块长度为 8,数据长度为 9,则填充用八位字节数等于 7,数据等于 FF FF FF FF FF FF FF FF FF: 数据: FF FF FF FF FF FF FF FF FF X923 填充: FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 07 |
ISO10126 |
ISO10126 填充字符串由一个字节序列组成,此字节序列的最后一个字节填充字节序列的长度,其余字节填充随机数据。
下面的示例演示此模式的工作原理。假定块长度为 8,数据长度为 9,则填充用八位字节数等于 7,数据等于 FF FF FF FF FF FF FF FF FF: 数据: FF FF FF FF FF FF FF FF FF ISO10126 填充: FF FF FF FF FF FF FF FF FF 7D 2A 75 EF F8 EF 07 |
None | 不填充。 |
PKCS7 |
PKCS #7 填充字符串由一个字节序列组成,每个字节填充该字节序列的长度。
下面的示例演示这些模式的工作原理。假定块长度为 8,数据长度为 9,则填充用八位字节数等于 7,数据等于 FF FF FF FF FF FF FF FF FF: 数据: FF FF FF FF FF FF FF FF FF PKCS7 填充: FF FF FF FF FF FF FF FF FF 07 07 07 07 07 07 07 |
Zeros | 填充字符串由设置为零的字节组成。 |
JAVA中支持的填充算法(Cipher)有
Alg. Name | Description |
---|---|
NoPadding | No padding. |
ISO10126Padding | This padding for block ciphers is described in 5.2 Block Encryption Algorithms in the W3C's "XML Encryption Syntax and Processing" document. |
OAEPPadding, OAEPWith<digest>And<mgf>Padding |
Optimal Asymmetric Encryption Padding scheme defined in PKCS1, where <digest> should be replaced by the message digest and <mgf> by the mask generation function. Examples: OAEPWithMD5AndMGF1Padding and OAEPWithSHA-512AndMGF1Padding.
If |
PKCS1Padding | The padding scheme described in PKCS1, used with the RSA algorithm. |
PKCS5Padding | The padding scheme described in RSA Laboratories, "PKCS5: Password-Based Encryption Standard," version 1.5, November 1993. |
SSL3Padding |
The padding scheme defined in the SSL Protocol Version 3.0, November 18, 1996, section 5.2.3.2 (CBC block cipher):
The size of an instance of a GenericBlockCipher must be a multiple of the block cipher's block length. The padding length, which is always present, contributes to the padding, which implies that if:
padding has to be (block_length - 1) bytes long, because of the existence of This make the padding scheme similar (but not quite) to PKCS5Padding, where the padding length is encoded in the padding (and ranges from 1 to block_length). With the SSL scheme, the sizeof(padding) is encoded in the always present |
简单对比之下发现,通用的有None,ISO10126两种填充法,实际上PKCS5Padding与PKCS7Padding基本上也是可以通用的。
在PKCS5Padding中,明确定义Block的大小是8位,而在PKCS7Padding定义中,对于块的大小是不确定的,可以在1-255之间(块长度超出255的尚待研究),填充值的算法都是一样的:
value=k - (l mod k) ,K=块大小,l=数据长度,如果l=8, 则需要填充额外的8个byte的8
在.net中,例如TripleDESCryptoServiceProvider ,默认BlockSize=64bits=8bytes,所以在这种情况下在PKCS5Padding=PKCS7Padding。
如果在C#中自己定义了一个不是64bits的加密块大小,同时使用PKCS7Padding,那么在java中使用JDK标准的PKCS5Padding就不能解密了。
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
des.Mode=CipherMode.ECB;
des.Padding=PaddingMode.PKCS7;
byte[] buffer =Encoding.Default.GetBytes("明文");
MemoryStream stream = new MemoryStream();
byte[] key=Convert.FromBase64String("AQjP4U1aCnnybWsmHUQ7BVIxHyrnQ2AP");
CryptoStream encStream = new CryptoStream(stream, des.CreateEncryptor(key, null), CryptoStreamMode.Write);
encStream.Write(buffer, 0, buffer.Length);
encStream.FlushFinalBlock();
byte[] res=stream.ToArray();
Console.WriteLine("result:"+Convert.ToBase64String(res));
C#跨语言,为保持于java等兼容,BlockSize默认为64,但也可以手动设置如下:
单位:BlockSize 单位bits
DESCryptoServiceProvider des = new DESCryptoServiceProvider()
des.BlockSize = 64;
des.Padding = PaddingMode.PKCS7;
des.Mode = CipherMode.ECB;
PKCS5Padding与PKCS7Padding的区别相关推荐
- java pkcs7 和 pkcs5_PKCS5Padding与PKCS7Padding的区别
工作中,我们常常会遇到跨语言平台的加密解密算法的交互使用,特别是一些标准的加解密算法,都设计到数据块Block与填充算法的 问题,例如C#与JAVA中的常见的填充算法如下: .Net中的填充算法: 成 ...
- python的aes的ecb加密_AES ECB PKCS5/PKCS7 加密 python实现 支持中文
ecb模式介绍 电码本模式(electronic codebook book (ecb) 这种模式是将整个明文分成若干段相同的小段,然后对每一小段进行加密. pkcs5padding和pkcs7pad ...
- 记半次元App数据解密记录
最近发现一个有意思的应用,半次元,这个应用中有很多Cosplay美图,很感兴趣便想试试能否通过抓包分析获取相应的接口,没想到自己实际上已经跳到了一个大大的深坑之中,一起来看下吧. 万里长征第一步:抓包 ...
- 密码学之DES/AES算法
本文示例代码详见:https://github.com/52fhy/cryp... DES DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1 ...
- php 如何使用openssl_encrypt进行aes非对称加密解密
一.DES介绍 DES 是对称性加密里面常见一种,全称为 Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法.密钥长度是64位(bit),超过位数密钥被忽略. ...
- python aes padding_python笔记43-加解密AES/CBC/pkcs7padding
前言 有些公司对接口的安全要求比较高,传参数的时候,不会明文的传输,先对接口加密,返回的数据也加密返回. 目前比较常见的加密方式是AES/CBC/pkcs7padding. AES五种加密模式 在AE ...
- java微信小程序解密AES/CBC/PKCS7Padding
摘要:微信小程序解密建议使用1.6及以上的环境使用maven下载jar包org.bouncycastlebcprov-jdk15on1.55加密类代码importorg.bouncycastle.jc ...
- 携程供应商接口数据解密AES/CBC/PKCS5Padding
2019独角兽企业重金招聘Python工程师标准>>> function aes128_cbc_encrypt($key, $data, $iv) {if(16 !== strlen ...
- Java笔记-AES加解密(PKCS7padding可用)
如下代码: package cn.it1995.tool;import org.apache.tomcat.util.codec.binary.Base64; import sun.misc.BASE ...
最新文章
- 刷算法的时候有没有必要自写测试用例?
- C++ leetCode 1. 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个
- mysql in 截断_MySQL十进制字段’数据在第1行的第x列被截断’问题
- 王思聪名下企业被拍卖1100万债权,此前还债20亿 网友:拍下等于“接盘侠”?...
- python学习笔记16--javascript总结
- mysql查询表字段的个数
- Linux 审计日志记录,linux日志服务器审计客户端history记录
- 有关python毕设题目_python毕设题目
- 超六类网线与7类网线的区别,你知道吗?
- ​汽车域控制器架构和OTA的心脏:网关的四大豪门(下)
- 横河变送器EJA110E-JMS4J-919EA
- MySQL数据库常用查询(带练习示例)
- linux怎么下载安装软件
- 【经济学_04】晨读:保险的实质 特效药 医疗膨胀 保险的发明
- PostMan管理EZ
- Flink process 和 apply 简单案例
- b 站神器更新,还出了新玩意
- 时间戳与时间转换、js时间戳判定是 今天、昨天还是更前的日子
- 微软商店Microsoft Store下载安装找这个
- 『深圳』在深圳,做个没故事的人
热门文章
- 在让元宇宙“圆梦”这条路上,交互技术卡在哪里了?
- 与年轻人的“要疯”五年,安踏如何保持新鲜感与吸引力?
- linux系统用xset命令,专 linux命令之set x详解
- 支持的sql语法_PostgreSQL 12 新特性解读之一|支持 SQL/JSON path
- java小数转换成百分数_在java中如何把小数转化成百分数
- 华为荣耀手机指令代码大全_双十二,华为/荣耀手机推荐选购指南,全系列横评推荐,那一款华为/荣耀手机最值得够买...
- linux(Ubuntu)查看环境变量指向的路径
- python详解enumerate()方法;
- Python基础教程:赋值语句和布尔值
- python约束 与MD5加密写法