遇到的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相关推荐

  1. Android与iOS在DES加密算法上的统一

    Java与iOS在DES加密算法上的对应关系如下: Java iOS CBC/PKCS5Padding kCCOptionPKCS7Padding ECB/PKCS5Padding kCCOption ...

  2. Java DES 加解密(DES/CBC/PKCS5Padding)

    /*** DES加密** @param data 加密数据* @param key 密钥* @return 返回加密后的数据*/public static byte[] desEncrypt(byte ...

  3. iOS:DES加密iOS和Android的匹配

    android端的加密代码: public static final String ALGORITHM_DES = "DES/CBC/PKCS5Padding";private s ...

  4. Java和.NET使用DES对称加密的区别

    Java和.NET的系统类库里都有封装DES对称加密的实现方式,但是对外暴露的接口却各不相同,甚至有时会让自己难以解决其中的问题,比如Java加密后的结果在.NET中解密不出来等,由于最近项目有跨Ja ...

  5. C#与java可以共用的DES加密解密

    C#的DES加密与解密算法我就不写了,主要写一下怎么去解密C#用DES加密后串,大家都知道C#的DES加密密钥长度是8位的,而java是8的倍数位,所以用普通的java中的DES是不行的,要解C#的加 ...

  6. des加解密java c#,C#编写DES加密、解密类

    这个C#类封装的DES加密解密,可以使用默认秘钥进行加密.解密,也可以自定义秘钥进行加密.解密,调用简单方便. 示例一: using System; using System.Security.Cry ...

  7. Java实现Base64、DES、AES、RSA加解密以及加密方式之间的区别

    Base64 加密, 这个其实不可以算作加密方法,它可以看作是一种编码方式,它的用途只是二进制数字和字符串进行相互转化. Base64是网络上最常见的用于传输 8Bit字节码的编码方式之一,是一种基于 ...

  8. java socket 加密,Java socket通信实现DES加密与解密

    DES是对称加密算法的其中一个,用一个密钥进行加密解密数据,安全性能比较低,效率较高,一些不太重要的数据可以使用DES加密算法进行加密解密传输,其他的3DES与AES用法类似. 流程图 首先认真看一下 ...

  9. Java与iOS对话:Java对象与Apple plist序列化

    我很高兴地宣布我的第一个开源项目java-plist-serializer可以帮助您将Java(尤其是基于Spring的应用程序)与iOS应用程序集成.   背景 我正在将Java Webapp作为后 ...

最新文章

  1. SQL中内连接、外连接、交叉连接
  2. hadoop和python的关系_Python 的 map 和 reduce 和 Hadoop 的 MapReduce 有什么关系?
  3. CentOS7 设置用户密码规则
  4. 还没掌握Linux文件权限与目录配置命令?就这还不点进来看看干货
  5. ipad服务器未响应怎么办,ipad平板连接Win7系统电脑半天没反应如何解决
  6. html微软雅黑字体模糊,如何解决WinXP下微软雅黑字体不清晰的问题
  7. 国内达梦数据库相关函数-时间日期
  8. 计算机研究生可以参加哪些比赛?
  9. cocos2d0基础篇笔记二
  10. 案例全是电商零售,B2B的用户画像怎么做???
  11. coreldrawx4缩略图显示不出来_CDR不显示缩略图的3种终极解决办法!
  12. Linux 软件源介绍
  13. 未将引用设置到对象的实例
  14. 【Qt】无法定位程序输入点 于动态链接库
  15. 《中国近代史纲要》思维导图复习版
  16. Faster:一个高效就地更新的并发键值存储
  17. 2017年计算机二级考试的word的答案,2017年3月全国计算机考试等级考试二级《MS Office高级应用》真题及答案...
  18. 无线网络攻击类型及防范
  19. 处理工具提示的TTN_NEEDTEXT通知
  20. VDP安装完成之后显示[009]Maintenance are not running

热门文章

  1. 基于微软平台IIS/ASP.NET开发的大型网站有哪些?
  2. unity 打砖块—休闲小游戏,摸鱼必备(完整代码)
  3. 【ARM】迅为rk3568开发板buildroot添加桌面应用
  4. 倒计时H5页面源码(2018年除夕)
  5. 简述计算机在市场调研与预测中的应用,《市场调研与预测》自考试卷-20210323213815.doc-原创力文档...
  6. R语言作业--第六章判别分析
  7. 基于JAVA线上动漫周边商城计算机毕业设计源码+数据库+lw文档+系统+部署
  8. 计算机绩点3.2算什么水平,绩点3.3代表什么水平
  9. 大数据缓存管理系统设计与实现
  10. pycharm中import导入包呈现灰色问题