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



原创粉丝点击