加密解密再也不是你的噩梦

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:

加密解密再也不是你的噩梦

也许你在你的项目中用过加密解密,诸如AES加解密、DES加解密等等加密算法。你从Github上下载了一份源码,导入到自己的项目当中,导入头文件,使用,欧了。

其实事情远没有你想得这么简单。你需要加密字符串对吧,你把字符串转换成了NSData,然后你需要提取出这个NSData中的字符信息(用来当做GET请求的参数)。这时候你就傻眼了。你发现,这个加密后的NSData已经无法转换成NSString了,那还用什么来当做GET请求的参数呢?

今天,哥给大家提供一个用来将任意编码的二进制文件转换为文本,并能将这个文本反过来转换为二进制文件的category。

 

直接提供源码:

NSData+Binary.h 与 NSData+Binary.m

//
//  NSData+Binary.h
//
//  http://home.cnblogs.com/u/YouXianMing/
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSData (Binary)

// 将不可识别二进制文件转换为可识别的文本文件
- (NSString *)transformToVisibleString;

@end


//
//  NSData+Binary.m
//
//  http://home.cnblogs.com/u/YouXianMing/
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//


#import "NSData+Binary.h"

@implementation NSData (Binary)

- (NSString *)transformToVisibleString
{
    if (self)
    {
        NSString* strRet = @"";
        char* pBuff = (char*)[self bytes];
        
        for (int i=0; i<self.length; i++)
        {
            strRet = [strRet stringByAppendingFormat:@"%02X", pBuff[i] & 0xFF];
        }
        
        return strRet;
    }
    else
    {
        return nil;
    }
}

@end

NSString+Binary.h 与 NSString+Binary.m
//
//  NSString+Binary.h
//
//  http://home.cnblogs.com/u/YouXianMing/
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//


#import <Foundation/Foundation.h>

@interface NSString (Binary)

// 将字符串转换成不可识别二进制文件
- (NSData *)transformToBinaryData;

@end


//
//  NSString+Binary.m
//
//  http://home.cnblogs.com/u/YouXianMing/
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "NSString+Binary.h"

@implementation NSString (Binary)

- (NSData *)transformToBinaryData
{
    if (self)
    {
        // 将字符串转换成不可识别二进制文件
        static unsigned char _map_ch2hex[] =
        {
            0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
            0, 0, 0, 0, 0, 0, 0,    // :, ;, <, =, >, ?, @,
            0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
        };
        
        unsigned char* bytes = (unsigned char*)malloc((self.length + 1) * sizeof(unsigned char));
        [[self uppercaseString] getCString:(char*)bytes
                                 maxLength:self.length + 1
                                  encoding:NSUTF8StringEncoding];
        
        unsigned char *p1 = bytes, *p2 = bytes;
        unsigned long n   = self.length / 2;
        for (int i = 0; i<n; i++)
        {
            *p1 = _map_ch2hex[*p2-'0'] * 0x10 + _map_ch2hex[*(p2+1)-'0'];
            p1++;
            p2 += 2;
        }
        
        NSData* toData = [NSData dataWithBytes:bytes length:n];
        return toData;
    }
    else
    {
        return nil;
    }
}

@end

以下两处是核心源码:

注:

为何不直接提供各种加密解密算法现成的源码呢?其实,本人只是提供给大家一个工具,用来将任意编码的二进制文件转换为文本,并能将这个文本反过来转换为二进制文件的category。面向对象设计中遵循单一职责原则,为了能模块化,让大家好封装而已。至于怎么去封装那些加密解密算法就是体力活了,本人提供的这个,就是你能用着舒服的很核心的部件之一。

目录
相关文章
|
人工智能 自然语言处理 搜索推荐
任何人不知道定制软件的这些优点我都会伤心的!
随着企业数字化转型的加速,定制软件开发成为了许多企业实现个性化需求的重要手段。其主要为了满足以下需求:
|
3月前
|
SQL 安全 数据安全/隐私保护
【惊心动魄!】Rails开发者的噩梦:那些差点毁了我职业生涯的安全漏洞……
【8月更文挑战第31天】本文探讨了加强Ruby on Rails应用安全性的最佳实践,包括防止SQL注入、XSS与CSRF攻击及安全存储密码等。通过对比不安全与安全的代码示例,如使用`User.find`替代`find_by_sql`避免SQL注入,利用`h`方法防御XSS攻击,以及借助`bcrypt`库加密密码,本文提供了实用的指导。同时强调了定期更新Rails框架和使用`brakeman`等工具的重要性,以持续保障应用安全。
38 0
|
数据可视化 Devops 开发工具
一文讲透 如何破解低代码“鸡肋”困境?
一文讲透 如何破解低代码“鸡肋”困境?
128 0
|
存储 安全 算法
为什么人人都要懂点密码学
人类进入二十一世纪以来,随着计算机和移动设备的普及高速发展,我们的社会已经高度信息化,为了防止信息被窃取、修改,就需要对信息的存储、传递进行加密处理,而加密就需要使用到加密算法,解密需要使用密码才可以看到原文。
233 1
|
算法 安全 Java
快速了解常用的消息摘要算法,再也不用担心面试官的刨根问底
加密算法通常被分为两种:对称加密和非对称加密。其中,对称加密算法在加密和解密时使用的密钥相同;非对称加密算法在加密和解密时使用的密钥不同,分为公钥和私钥。此外,还有一类叫做消息摘要算法,是对数据进行摘要并且不可逆的算法。 这次我们了解一下消息摘要算法。
638 0
快速了解常用的消息摘要算法,再也不用担心面试官的刨根问底
|
安全 算法 网络安全
面试常问:HTTPS的加密过程 ----- 光明和黑暗的恩怨情仇
面试常问:HTTPS的加密过程 ----- 光明和黑暗的恩怨情仇
153 0
面试常问:HTTPS的加密过程 ----- 光明和黑暗的恩怨情仇
|
SQL JavaScript 前端开发
#你会担心掌握的技术语言过时吗?#一入编程深似海,从此妹子是路人
我掌握的技术语言有C、C++、ActionScript、JavaScript、TypeScript、Flex、Java、SQL、Scala、CAD,当然,这还不算一些具有特殊语言的技术框架,如Vue.js、Angular、Spark、Android、HarmonyOS、Node.js等,如果算上就更多了。
259 0
|
数据安全/隐私保护
【杂(瞎)谈(聊)】易经当中的密码学
看到这个标题,估计可能会有不少读者会有疑问,易经这不是个文学作品吗,怎么和数学相关的密码学给搞到一起了,这不是标题党蛤, 下面小Q来给大家聊聊在易经当中所体现的一些密码学的思想,有些资料来源也不太确定,我凭借记忆进行搜索的,如有错误还请各位读者海涵。
【杂(瞎)谈(聊)】易经当中的密码学
|
存储 算法 安全
【密码学】杂(瞎)谈(聊)哈希函数
本文依然是闲聊,不讲具体的算法内容,来一个小总结,相信大家看过我写过的文章之后,应该对于md系列算法 sha系列算法 sm3等哈希函数比较熟悉了,不熟悉的读者,我再来安利一下我之前写过的文章或者大家也可以去查阅相关的资料,在这里不再重复描述算法的具体内容了,本文呢,针对哈希函数来一个小小的总结,来看一下哈希函数有哪些公共的特性。
【密码学】杂(瞎)谈(聊)哈希函数
|
数据采集 搜索推荐
做一款属于自己的“签名设计软件”,外行玩儿过都说牛逼
做一款属于自己的“签名设计软件”,外行玩儿过都说牛逼
做一款属于自己的“签名设计软件”,外行玩儿过都说牛逼