DES,RSA加解密,base64格式字符串转换,字典排序
来源:互联网 发布:tcp 51 udp 端口 编辑:程序博客网 时间:2024/05/17 16:43
DES,RSA加解密,base64格式字符串转换,字典排序
(一)对称加密(Symmetric Cryptography)
对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key),这种方法在密码学中叫做对称加密算法。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。
对称加密通常使用的是相对较小的密钥,一般小于256 bit。因为密钥越大,加密越强,但加密与解密的过程越慢。如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,不行的话就再用1解;但如果你的密钥有1 MB大,黑客们可能永远也无法破解,但加密和解密的过程要花费很长的时间。密钥的大小既要照顾到安全性,也要照顾到效率,是一个trade-off。
对称加密的一大缺点是密钥的管理与分配,换句话说,如何把密钥发送到需要解密你的消息的人的手里是一个问题。在发送密钥的过程中,密钥有很大的风险会被黑客们拦截。现实中通常的做法是将对称加密的密钥进行非对称加密,然后传送给需要它的人。
(二)非对称加密(Asymmetric Cryptography)
1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这就是“公开密钥系统”。相对于“对称加密算法”这种方法也叫做“非对称加密算法”。
非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。比如,你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人--银行才能对你的消息解密。与对称加密不同的是,银行不需要将私钥通过网络发送出去,因此安全性大大提高。虽然非对称加密很安全,但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。对称加密算法用来对敏感数据等信息进行加密,常用的算法包括:DES(Data EncryptionStandard):数据加密标准,速度较快,适用于加密大量数据的场合。
3DES(TripleDES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。
AES(Advanced EncryptionStandard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高;
常用的非对称加密算法有:
RSA:由
RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的; DSA(Digital SignatureAlgorithm):数字签名算法,是一种标准的
DSS(数字签名标准); ECC(Elliptic CurvesCryptography):椭圆曲线密码编码学。
就我们项目,主要用的DES,RSA二者的对称加密和非对称加密的双重加密。
1,DES加密:
DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。需要注意的是,在某些文献中,作为算法的DES称为数据加密算法(Data Encryption Algorithm,DEA),已与作为标准的DES区分开来。
//Des加密
NSString *secretDesString =[DES EncryptToBase64:TEST_KEY byKey:DES_KEY];
NSLog(@"Des加密后为:%@",secretDesString);
//Des解密
NSString *secretGetString =[DES DecryptFromBase64:secretDesString byKey:DES_KEY];
NSLog(@"Des解密后为:%@",secretGetString);
2,RSA加密:
RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK。
NSMutableString * arcString = [[NSMutableString alloc] init];
for (int i = 0; i < 16; i++) {
int charOrNum = arc4random() % 2;
// 输出字母还是数字
if (charOrNum == 0) {
[arcString appendFormat:@"%c",(char)('A' + (arc4random_uniform(26)))];
} else if (charOrNum == 1) {
[arcString appendFormat:@"%d",arc4random()%10];
}
}
NSString *RSAreturnString = [RSA encryptString:arcString publicKey:RSA_PUBLIC_KEY];
NSLog(@"RSA加密后为:%@",RSAreturnString);
#pragma mark ===============================================
#pragma mark base64格式字符串转换
#pragma mark ===============================================
//将文本转换为base64格式字符串
NSString *base64ReturnString = [CommonFuncbase64StringFromText:TEST_KEY];
NSLog(@"base64后为:%@",base64ReturnString);
//将base64格式字符串转换为文本
NSString *dBase64ReturnString = [CommonFunctextFromBase64String:base64ReturnString];
NSLog(@"base64转字符串后为:%@",dBase64ReturnString);
#pragma mark ===============================================
#pragma mark 字典排序,接口加解密中也是经常用到的
#pragma mark ===============================================
NSDictionary *showDic =[NSDictionarydictionaryWithObjectsAndKeys:@"张三",@"name",@"男",@"sex",@"学生",@"job",nil];
NSString *getPaiXuString =[selfgetResultSignWithDic:showDic];
NSLog(@"字典排序后合并的字符串为:%@",getPaiXuString);
查看具体代码,请上git下载: https://github.com/Deng0512/Encryption
- DES,RSA加解密,base64格式字符串转换,字典排序
- android JNI RSA 3DES BASE64 加解密实现
- java中 Base64,MD5,DES,RSA 加解密
- base64加解密 des加解密
- BASE64转换,内含:IOS自带DES加解密
- BASE64转换,内含:IOS自带DES加解密
- BASE64转换,内含:IOS自带DES加解密
- 【JAVA】常用加解密算法总结及JAVA实现【BASE64,MD5,SHA,DES,3DES,AES,RSA】
- RSA加密和3DES加解密
- iOS des加解密 base64输出
- golang DES跟base64相结合加解密
- MD5加密、DES加解密、RSA加解密
- android中的MD5、Base64、DES/3DES/ADES加解密
- iOS开发:BASE64转换,内含:IOS自带DES加解密 - wangzhipeng
- C#.NET 加密解密:AES/DES/Base64/RSA/MD5/SHA256
- C#.NET 加密解密:AES/DES/Base64/RSA/MD5/SHA256
- C#.NET 加密解密:AES/DES/Base64/RSA/MD5/SHA256
- 加解密算法总结(RSA,DES,MD5)
- 这些自动贩卖机太棒了,在车站专卖短篇小说
- BZOJ 3135: [Baltic2013]pipes
- Android代码热修复基础-类只加载一次
- linux下的多线程编程
- 自己写的Linux基础笔记
- DES,RSA加解密,base64格式字符串转换,字典排序
- 面试题----SQL
- 剑指Offer_面试题07_用两个栈实现队列
- Node 的单元测试--jasmine
- Linux下使用C/C++访问数据库——SQL Server篇
- spark
- 快速全面了解LORA
- c# 网上搜集面试题目大全
- BZOJ1051: [HAOI2006]受欢迎的牛