今天重新整理了一遍以前项目中经常用到过的几种加密的方式,发现以前其实对这几种加密的方式理解的不是特别的深刻首先从加密的本质是来看,是把一些不定长度的数据按照一定的编码规则输出为一种一定长度的数据串。这个是我理解的加密,其中不同的加密手段采用不同的编码规则。阅读之前先了解一些基本的概念:
1.简单的概念
明文:加密前的信息
密文:机密后的信息
算法:加密或解密的算法
密钥:算法使用的钥匙(读作miyao,正确应该是miyue,但是大家都读miyao)
2.简单的例子
将123456每位数字都加1后得到234567,
其中123456就是明文,234567就是密文,加密密钥就是1,加密算法是每位加
3.对称加密和非对称加密
以上为例,
123456-->234567的加密密钥就是1,加密算法是每位+
234567-->123456的解密密钥也是1,解密算法是每位-
其中加密算法(+)和解密算法(-)相对称,这种加密算法就称作对称加密,
同样,如果加密算法和解密算法不对称就称之为非对称加密。
4.算法举例
对称加密算法:DES算法,3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法,AES算法。
非对称加密算法:RSA、Elgamal、背包算法、Rabin、D-H、ECC。
经典的哈希算法:MD2、MD4、MD5 和 SHA-1(目的是将任意长输入通过算法变为固定长输出,且保证输入变化一点输出都不同,且不能反向解密)
下面我们说一下我们常用到的加密手段
1.base64,这个加密手段是一些项目里面常用到的,一般采用这种加密手段十分好破解,他的加密实际作用不在于保密,你看看经过BASE64编码后的字符串,全部都是由标准键盘上面的常规字符组成,这样编码后的字符串在网关之间传递不会产生UNICODE字符串不能识别或者丢失的现象。你再仔细研究下EMAIL就会发现其实EMAIL就是用base64编码过后再发送的。然后接收的时候再还原。
还有一种情况下用BASE64编码也很好,比如一个图片文件,或者其他任何二进制文件。我可以把它编码成字符串。这样用XML或者数据库就能直接以文本的方式来存储这些文件了。
下面就说一下他的具体使用了:
首先你要先添加几个文件GTMBase64,这个是第三方的库可以从网络资源中获取,直接调用里面的算法
//加密算法
+(NSData *)encodeData:(NSData *)data {
return [self baseEncode:[data bytes]
length:[data length]
charset:kBase64EncodeChars
padded:YES];
}
//解密算法
+(NSData *)decodeData:(NSData *)data {
return [self baseDecode:[data bytes]
length:[data length]
charset:kBase64DecodeChars
requirePadding:YES];
}
从程序中我们可以看到无论是加密还是解密他处理的对象都是nsdata类型的
所以我们在加密解密之前要对数据进行二进制编码
实例说明:
//用户名
NSData*data_user=[userName_TF.text dataUsingEncoding:NSUTF8StringEncoding];
NSData*Data_U=[GTMBase64 encodeData:data_user];
NSString*username=[[NSString alloc]initWithData:Data_U encoding:NSUTF8StringEncoding];
2.下面说一下MD5加密的作用和用法
首先要知道MD5加密原理和性质,MD5首先他是一个安全的算列算法,他有两个特点。其一,输入两段明文也就是原始数据,不会得到相同的输出值。
其二,他
1.简单的概念
明文:加密前的信息
密文:机密后的信息
算法:加密或解密的算法
密钥:算法使用的钥匙(读作miyao,正确应该是miyue,但是大家都读miyao)
2.简单的例子
将123456每位数字都加1后得到234567,
其中123456就是明文,234567就是密文,加密密钥就是1,加密算法是每位加
3.对称加密和非对称加密
以上为例,
123456-->234567的加密密钥就是1,加密算法是每位+
234567-->123456的解密密钥也是1,解密算法是每位-
其中加密算法(+)和解密算法(-)相对称,这种加密算法就称作对称加密,
同样,如果加密算法和解密算法不对称就称之为非对称加密。
4.算法举例
对称加密算法:DES算法,3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法,AES算法。
非对称加密算法:RSA、Elgamal、背包算法、Rabin、D-H、ECC。
经典的哈希算法:MD2、MD4、MD5 和 SHA-1(目的是将任意长输入通过算法变为固定长输出,且保证输入变化一点输出都不同,且不能反向解密)
下面我们说一下我们常用到的加密手段
1.base64,这个加密手段是一些项目里面常用到的,一般采用这种加密手段十分好破解,他的加密实际作用不在于保密,你看看经过BASE64编码后的字符串,全部都是由标准键盘上面的常规字符组成,这样编码后的字符串在网关之间传递不会产生UNICODE字符串不能识别或者丢失的现象。你再仔细研究下EMAIL就会发现其实EMAIL就是用base64编码过后再发送的。然后接收的时候再还原。
还有一种情况下用BASE64编码也很好,比如一个图片文件,或者其他任何二进制文件。我可以把它编码成字符串。这样用XML或者数据库就能直接以文本的方式来存储这些文件了。
下面就说一下他的具体使用了:
首先你要先添加几个文件GTMBase64,这个是第三方的库可以从网络资源中获取,直接调用里面的算法
//加密算法
+(NSData *)encodeData:(NSData *)data {
return [self baseEncode:[data bytes]
length:[data length]
charset:kBase64EncodeChars
padded:YES];
}
//解密算法
+(NSData *)decodeData:(NSData *)data {
return [self baseDecode:[data bytes]
length:[data length]
charset:kBase64DecodeChars
requirePadding:YES];
}
从程序中我们可以看到无论是加密还是解密他处理的对象都是nsdata类型的
所以我们在加密解密之前要对数据进行二进制编码
实例说明:
//用户名
NSData*data_user=[userName_TF.text dataUsingEncoding:NSUTF8StringEncoding];
NSData*Data_U=[GTMBase64 encodeData:data_user];
NSString*username=[[NSString alloc]initWithData:Data_U encoding:NSUTF8StringEncoding];
2.下面说一下MD5加密的作用和用法
首先要知道MD5加密原理和性质,MD5首先他是一个安全的算列算法,他有两个特点。其一,输入两段明文也就是原始数据,不会得到相同的输出值。
其二,他