加密

1,对称加密算法
密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密。
特点:算法公开、计算量小、加密速度快、加密效率高特点。但交易双方都使用同样钥匙,安全性得不到保证。
具体算法有:DES算法,3DES算法,AES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法。

2,非对称加密算法
非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。
特点:由于有两种密钥,其中一个是公开的,这样就消除了最终用户交换密钥的需要,更安全。但由于算法复杂,加密解密速度没有对称加密解密的速度快。
主要算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。

3,RSA算法
(1)RSA算法是第一个能同时用于加密和数字签名的算法。
(2)RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
(3)RSA的算法涉及三个参数,n、e1、e2。
其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。
e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)(q-1))=1。
(n,e1),(n,e2)就是密钥对。其中(n,e1)为公钥,(n,e2)为私钥。
RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e2 mod n;B=A^e1 mod n;(公钥加密体制中,一般用公钥加密,私钥解密)
e1和e2可以互换使用,即:
A=B^e1 mod n;B=A^e2 mod n;
(4)由于RSA的安全性依赖于大数分解,为保证安全,目前来说RSA密钥(即n)长度至少要为1024位。
(5)由于RSA算法进行的都是大数计算,使得RSA最快的情况也比DES慢上好几倍。

4,RSA加密内容长度限制的问题
通常1024位key的最多只能加密127位数据,要解决这个问题有两种办法:
(1)自己把数据变成N个117字节的数据段来分别加密,解密也需要自己一个个解密再完成字节拼装
(2)加密的时候:使用对称加密(AES/DES etc)加密数据,然后用RSA公钥加密对称加密的密钥。
解密的时候:用RSA的私钥解密得到对称加密的密钥,然后完成反向操作得到明文。 (推荐这种方式)

5,RSA的使用场合
1,用于加密数据:比如我是公司领导,我希望员工A,B,C给我发消息的时候能够加密。那么我这边可以生成一对密钥,把公钥给ABC。A把消息使用公钥加密后发给我,我收到后使用私钥即可解密。这过程中如果加密消息被BC拦截了,虽然他们有一样的公钥,但是无法解密的。
2,用于数字签名:比如我要给A,B,C发送一段数据,但为了保证这个是我发送的,而不是别人伪造的,那么我可以附上我的数字签名。做法是对数据进行MD5之类的运算以取得数据的”指纹”,再对”指纹”进行加密,加密将使用密钥对中的不公开的私钥。A,B,C收到数据后,用同样的运算获得数据指纹,再用公钥对加密指纹进行解密,比较解密结果与他自己计算出来的指纹是否一致,即可确定数据是否的确是我发送的、以及在传输过程中是否被篡改。

SHA256

#import <CommonCrypto/CommonDigest.h>
- (NSString *)SHA256
{
    const char *s = [self cStringUsingEncoding:NSASCIIStringEncoding];
    NSData *keyData = [NSData dataWithBytes:s length:strlen(s)];

    uint8_t digest[CC_SHA256_DIGEST_LENGTH] = {0};
    CC_SHA256(keyData.bytes, (CC_LONG)keyData.length, digest);
    NSData *out = [NSData dataWithBytes:digest length:CC_SHA256_DIGEST_LENGTH];
    NSString *hash = [out description];
    hash = [hash stringByReplacingOccurrencesOfString:@" " withString:@""];
    hash = [hash stringByReplacingOccurrencesOfString:@"<" withString:@""];
    hash = [hash stringByReplacingOccurrencesOfString:@">" withString:@""];
    return hash;
}

func sha256() -> String{
        if let stringData = self.data(using: .utf8) {
            return hexStringFromData(input: digest(input: stringData as NSData))
        }
        return ""
    }

    private func digest(input : NSData) -> NSData {
        let digestLength = Int(CC_SHA256_DIGEST_LENGTH)
        var hash = [UInt8](repeating: 0, count: digestLength)
        CC_SHA256(input.bytes, UInt32(input.length), &hash)
        return NSData(bytes: hash, length: digestLength)
    }

    private  func hexStringFromData(input: NSData) -> String {
        var bytes = [UInt8](repeating: 0, count: input.length)
        input.getBytes(&bytes, length: input.length)

        var hexString = ""
        for byte in bytes {
            hexString += String(format:"%02x", UInt8(byte))
        }

        return hexString
    }

http://www.jianshu.com/p/74a796ec5038

iOS设备是否越狱的判断代码

iOS中如何呼出另一个应用

通用链接(Universal Links)

如何在运行时改变App的图标

iOS 前后台切换(APP运行期间生命周期)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值