当前位置: 首页 > news >正文

和java的DES/ECB/PKCS5Padding相同的objc实现方式


java是:DES/ECB/PKCS5Padding
1、是DES,不是3DES。
2、分组方式是ECB,所以不需要初始化向量。

3、填充模式是PKCS5Padding。


在stackoverflow上查,说iOS是不支持PKCS5Padding的,但是继续查找后实际是支持的,只是方式很怪异。



-(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;
}

相关文章:

  • 数学之美 系列二 -- 谈谈中文分词
  • DZNEmptyDataSet实现的分析
  • 数学之美 系列三 -- 隐含马尔可夫模型在语言处理中的应用
  • 设置status bar字体颜色的优化方案
  • 使UILabel垂直考上对齐
  • 数学之美系列五 -- 简单之美:布尔代数和搜索引擎的索引
  • 为什么layer的mask属性和photoshop的mask不一样
  • 数学之美系列 4 -- 怎样度量信息?
  • 无符号整数和有符号整数比较的注意点
  • 数学之美 系列七 -- 信息论在信息处理中的应用
  • UITabBar实现中间大按钮
  • 数学之美系列六 -- 图论和网络爬虫 (Web Crawlers)
  • iPhone simulator 键盘选项的Uses the Same Layout as OS X
  • 数学之美 系列九 -- 如何确定网页和查询的相关性
  • NSTimer循环引用的成因
  • 《深入 React 技术栈》
  • 【译】理解JavaScript:new 关键字
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • ES10 特性的完整指南
  • java概述
  • Python十分钟制作属于你自己的个性logo
  • 记一次用 NodeJs 实现模拟登录的思路
  • 模型微调
  • 前端之Sass/Scss实战笔记
  • 使用Gradle第一次构建Java程序
  • 思考 CSS 架构
  • 微信小程序:实现悬浮返回和分享按钮
  • 线上 python http server profile 实践
  • 学习JavaScript数据结构与算法 — 树
  • 再谈express与koa的对比
  • 中文输入法与React文本输入框的问题与解决方案
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​插件化DPI在商用WIFI中的价值
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (11)MSP430F5529 定时器B
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (二)springcloud实战之config配置中心
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (五)IO流之ByteArrayInput/OutputStream
  • (转)JAVA中的堆栈
  • (转)ORM
  • (转)Sublime Text3配置Lua运行环境
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • .net中我喜欢的两种验证码
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...