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

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

也许你在你的项目中用过加密解密,诸如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。面向对象设计中遵循单一职责原则,为了能模块化,让大家好封装而已。至于怎么去封装那些加密解密算法就是体力活了,本人提供的这个,就是你能用着舒服的很核心的部件之一。

时间: 2024-09-16 07:11:34

加密解密再也不是你的噩梦的相关文章

数据-新 IC卡初始化加密解密,默认FFFFFFFFFFFF

问题描述 新 IC卡初始化加密解密,默认FFFFFFFFFFFF 大家都知道 新的 ic卡 密码 12个F,即 255 255 255 255 255 255,校验密码6个 0xff , 那么我想设置新的密码,就是在密码 区 写入新的密码数据 ,默认每区 密码块是000000000000FF078069FFFFFFFFFFFF,FFFFFFFFFFFF就是密码,那么 0000000000FF078069 这一部分是什么,还有 比如我把密码 改成12个A,那我的校验密码 对对应的是什么呢,0xff

RSA加密解密(附源码工程)

版权声明:本文为博主原创文章,转载注明出处http://blog.csdn.net/u013142781 目录(?)[+] 一.RSA加密介绍 RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.1987年首次公布,当时他们三人都在麻省理工学院工作.RSA就是他们三人姓氏开头字母拼在一起组成的. RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,

详解.Net下的加密解密算法(6) 玩转非对称加密

本博文来聊聊怎么玩转非对称加密吧,这里主要介绍.NET算法下的3种非对称加密算法:DSA,RSA,ECDsa.上两篇博文分 别为Hash家族和非对称加密家族找到了lead,现在我们就为非对称加密技术找个合适的lead吧. 首先创建一个接口 :"IEncryptAndDecrypt",然后为上面的3中算法分别创建3个实现类并让这些类实现接口"IEncryptAndDecrypt".它们 的情况如下图: 这下我们把这些哥们都召集起来了,现在我们就给他们找一个lead:&

php中AES加密解密的例子小结

 话不多说,先放上代码,一共有两个文件:AES.php(aes算法类文件)和aesDemo.php(应用实例文件) aesDemo.php:   例子,    代码如下: <?php require_once('./AES.php'); //$aes = new AES(); $aes = new AES(true);// 把加密后的字符串按十六进制进行存储 //$aes = new AES(true,true);// 带有调试信息且加密字符串按十六进制存储 $key = "this is

详解.NET下的加密解密算法(3) 非对称加密

本博文列出了.NET下常用的非对称加密算法,并将它们制作成小DEMO,希望能对大家有所帮助. RSA static string EnRSA(string data,string publickey) { RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); byte[] cipherbytes; rsa.FromXmlString(publickey); cipherbytes = rsa.Encrypt(Encoding

Javascript实现摩斯码加密解密

摩尔斯电码是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母.数字和标点符号,是由美国人萨缪尔·摩尔斯在1836年发明. 每一个字符(字母或数字)对应不同的序列(由点和划组成). 一般来说,任何一种能把书面字符用可变长度的信号表示的编码方式都可以称为摩尔斯电码. 但现在这一术语只用来特指两种表示英语字母和符号的摩尔斯电码:美式摩尔斯电码和国际摩尔斯电码.下面内容仅针对国际摩尔斯电码. 字母.数字.标点.特殊字符与摩斯码对照表 字母 字母 摩斯码 字母 摩斯码 字母 摩斯码 字母 摩

JAVASCRIPT加密解密终级指南

javascript|加密|解密 本文一共介绍了七种方法一最简单的加密解密二转义字符"\"的妙用三使用Microsoft出品的脚本编码器Script Encoder来进行编码 自创简单解码四任意添加NUL空字符十六进制00H 自创五无用内容混乱以及换行空格TAB大法六自写解密函数法七错误的利用 自创 在做网页时其实是网页木马呵呵最让人烦恼的是自己辛辛苦苦写出来的客户端IE运行的JAVASCRIPT代码常常被别人轻易的拷贝实在让自己的心里有点不是滋味要知道自己写点东西也挺累的......

关于网页代码加密解密保护

加密|解密|网页 文本代码保护是件很头痛的事,随着了解的加深保护的方法越多,也就意味着漏洞越多. [-调取原代码的方法-] 1:右键 - 查看原文件 2:查看 - 原文件 3:文件 - 另存为 4:IE缓存 5:还可以通过代码提取 教程代码: <SCRIPT> function add() { var ress=document.forms[0].it315zhangxx.value window.location="view-source:"+ress; } </S

&amp;#106avascript加密解密7种方法

加密|解密    本文一共介绍了七种JAVASCRIPT加密方法 在做网页时其实是网页木马呵呵最让人烦恼的是自己辛辛苦苦写出来的客户端IE运行的JAVASCRIPT代码常常被别人轻易的拷贝实在让自己的心里有点不是滋味要知道自己写点东西也挺累的......^*^ 但我们也应该清楚地认识到因为JAVASCRIPT代码是在IE中解释执行要想绝对的保密是不可能的我们要做的就是尽可能的增大拷贝者复制的难度让他知难而退但愿~!~下面我结合自己这几年来的实践及个人研究的心得和大家一起来探讨一下网页中JAVAS