java和iOS的DES/EBC/PKCS5Padding
遇到的java代码如下:
Cipher cipher=Cipher.getInstance("DES/EBC/PKCS5Padding");
以前写的代码,给的参数都是DES或DESede。实际上DESede是简写,它与DESede/ECB/PKCS5Padding等价。这个参数分为三段。
- 第一段是加密算法的名称,如DESede实际上是3-DES。这一段还可以放其它的对称加密算法,如Blowfish等。
- 第二段是分组加密的模式,除了CBC和ECB之外,还可以是NONE/CFB/QFB等。最常用的就是CBC和ECB了。DES采用分组加密的方式,将明文按8字节(64位)分组分别加密。如果每个组独立处理,则是ECB。CBC的处理方式是先用初始向量IV对第一组加密,再用第一组的密文作为密钥对第二组加密,然后依次完成整个加密操作。如果明文中有两个分组的内容相同,ECB会得到完全一样的密文,但CBC则不会。
- 第三段是指最后一个分组的填充方式。大部分情况下,明文并非刚好64位的倍数。对于最后一个分组,如果长度小于64位,则需要用数据填充至64位。PKCS5Padding是常用的填充方式,如果没有指定,默认的方式就是它。
补充一点,虽然DES的有效密钥长度是56位,但要求密钥长度是64位(8字节)。3DES则要求24字节。
和java的DES/ECB/PKCS5Padding相同的objc实现方式
-(NSString*) decryptUseDES:(NSString*)plainText {
NSString * key = @"akey";
NSString *ciphertext = nil;
NSData *textData = [plainText dataUsingEncoding:NSUTF8StringEncoding];
NSUInteger dataLength = [textData length];
unsigned char buffer[1024];
memset(buffer, 0, sizeof(char));
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES,
//这个地方很奇怪,这种组合方式实现的结果就是java的PKCS5Padding模式了。
//不知道为什么参数中指明的是kCCOptionPKCS7Padding,而实际的填充就是PKCS5Padding了。
kCCOptionECBMode | kCCOptionPKCS7Padding,
[key UTF8String], kCCKeySizeDES,
NULL, //ECB模式,不需要初始化向量。
[textData bytes], dataLength,
buffer, 1024,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
NSUInteger capacity = data.length * 2;
NSMutableString *sbuf = [NSMutableString stringWithCapacity:capacity];
const unsigned char *buf = data.bytes;
NSInteger i;
for (i=0; i<data.length; ++i) {
[sbuf appendFormat:@"%02X", (NSUInteger)buf[i]];
}
ciphertext = [sbuf copy];
}
return ciphertext;
}
java和iOS的DES/EBC/PKCS5Padding相关推荐
- Android与iOS在DES加密算法上的统一
Java与iOS在DES加密算法上的对应关系如下: Java iOS CBC/PKCS5Padding kCCOptionPKCS7Padding ECB/PKCS5Padding kCCOption ...
- Java DES 加解密(DES/CBC/PKCS5Padding)
/*** DES加密** @param data 加密数据* @param key 密钥* @return 返回加密后的数据*/public static byte[] desEncrypt(byte ...
- iOS:DES加密iOS和Android的匹配
android端的加密代码: public static final String ALGORITHM_DES = "DES/CBC/PKCS5Padding";private s ...
- Java和.NET使用DES对称加密的区别
Java和.NET的系统类库里都有封装DES对称加密的实现方式,但是对外暴露的接口却各不相同,甚至有时会让自己难以解决其中的问题,比如Java加密后的结果在.NET中解密不出来等,由于最近项目有跨Ja ...
- C#与java可以共用的DES加密解密
C#的DES加密与解密算法我就不写了,主要写一下怎么去解密C#用DES加密后串,大家都知道C#的DES加密密钥长度是8位的,而java是8的倍数位,所以用普通的java中的DES是不行的,要解C#的加 ...
- des加解密java c#,C#编写DES加密、解密类
这个C#类封装的DES加密解密,可以使用默认秘钥进行加密.解密,也可以自定义秘钥进行加密.解密,调用简单方便. 示例一: using System; using System.Security.Cry ...
- Java实现Base64、DES、AES、RSA加解密以及加密方式之间的区别
Base64 加密, 这个其实不可以算作加密方法,它可以看作是一种编码方式,它的用途只是二进制数字和字符串进行相互转化. Base64是网络上最常见的用于传输 8Bit字节码的编码方式之一,是一种基于 ...
- java socket 加密,Java socket通信实现DES加密与解密
DES是对称加密算法的其中一个,用一个密钥进行加密解密数据,安全性能比较低,效率较高,一些不太重要的数据可以使用DES加密算法进行加密解密传输,其他的3DES与AES用法类似. 流程图 首先认真看一下 ...
- Java与iOS对话:Java对象与Apple plist序列化
我很高兴地宣布我的第一个开源项目java-plist-serializer可以帮助您将Java(尤其是基于Spring的应用程序)与iOS应用程序集成. 背景 我正在将Java Webapp作为后 ...
最新文章
- SQL中内连接、外连接、交叉连接
- hadoop和python的关系_Python 的 map 和 reduce 和 Hadoop 的 MapReduce 有什么关系?
- CentOS7 设置用户密码规则
- 还没掌握Linux文件权限与目录配置命令?就这还不点进来看看干货
- ipad服务器未响应怎么办,ipad平板连接Win7系统电脑半天没反应如何解决
- html微软雅黑字体模糊,如何解决WinXP下微软雅黑字体不清晰的问题
- 国内达梦数据库相关函数-时间日期
- 计算机研究生可以参加哪些比赛?
- cocos2d0基础篇笔记二
- 案例全是电商零售,B2B的用户画像怎么做???
- coreldrawx4缩略图显示不出来_CDR不显示缩略图的3种终极解决办法!
- Linux 软件源介绍
- 未将引用设置到对象的实例
- 【Qt】无法定位程序输入点 于动态链接库
- 《中国近代史纲要》思维导图复习版
- Faster:一个高效就地更新的并发键值存储
- 2017年计算机二级考试的word的答案,2017年3月全国计算机考试等级考试二级《MS Office高级应用》真题及答案...
- 无线网络攻击类型及防范
- 处理工具提示的TTN_NEEDTEXT通知
- VDP安装完成之后显示[009]Maintenance are not running
热门文章
- 基于微软平台IIS/ASP.NET开发的大型网站有哪些?
- unity 打砖块—休闲小游戏,摸鱼必备(完整代码)
- 【ARM】迅为rk3568开发板buildroot添加桌面应用
- 倒计时H5页面源码(2018年除夕)
- 简述计算机在市场调研与预测中的应用,《市场调研与预测》自考试卷-20210323213815.doc-原创力文档...
- R语言作业--第六章判别分析
- 基于JAVA线上动漫周边商城计算机毕业设计源码+数据库+lw文档+系统+部署
- 计算机绩点3.2算什么水平,绩点3.3代表什么水平
- 大数据缓存管理系统设计与实现
- pycharm中import导入包呈现灰色问题