3des加密算法 ios_ios des3加密和3des加密是一样的吗 - CSDN
精华内容
参与话题
  • iOS项目中使用OpenSSL库

    千次阅读 2016-11-30 17:26:43
    iOS项目中使用OpenSSL库由于项目中android端和PC端的加密方式是PBEwithMD5andDes,对于加密算法这个真不太熟悉,相比于BASE64或者MD5,这个算法在网上比较难找,终于在stackoverflow上找到一个和android端比较像的...

    iOS项目中使用OpenSSL库

    由于项目中android端和PC端的加密方式是PBEwithMD5andDes,对于加密算法这个真不太熟悉,相比于BASE64或者MD5,这个算法在网上比较难找,终于在stackoverflow上找到一个和android端比较像的PBEwithMD5andDes加密算法,于是就直接拿来修改修改,发现这个算法需要使用OpenSSL库才能使用。

    下面记录一下OpenSSL的导入过程:

    1. 已经有国外大牛直接帮编译好了的库,已经支持各种架构,github地址:https://github.com/x2on/OpenSSL-for-iPhone 直接下载该库到桌面,要想把demo跑起来需要执行两个命令:

      步骤1: cd 到demo路径 输入命令: ./build-libssl.sh 需要跑一会才执行完
      步骤2:输入命令: ./build-libssl.sh –version=1.1.0c

      执行完后会在demo下生成两个文件夹:
      这里写图片描述

    2. include文件夹是头文件,lib是静态库,把这两个文件夹拖进项目
      这里写图片描述

    3.在Header Search Paths中添加include文件夹的路径
    这里写图片描述

    4.检查Library Search Paths中有没有添加lib文件夹路径,这里面装的是编译好的静态库,我使用的是Xcode8,已经自动帮我引入了
    这里写图片描述

    5.编译一下就可以了。

    展开全文
  • iOS常用加密算法和比较

    千次阅读 2015-03-17 10:54:22
    对称加密算法 对称加密算法用来对敏感数据等信息进行加密,常用的算法包括: DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合。 3DES(Triple DES):是基于DES,对一块数据用...

    对称加密算法

    对称加密算法用来对敏感数据等信息进行加密,常用的算法包括:

    DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合。

    3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。

    AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高;

    非对称加密算法

    RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的;

    DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准);

    ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学。

    ECC和RSA相比,在许多方面都有对绝对的优势,主要体现在以下方面:

    抗攻击性强。相同的密钥长度,其抗攻击性要强很多倍。

    计算量小,处理速度快。ECC总的速度比RSA、DSA要快得多。

    存储空间占用小。ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多,意味着它所占的存贮空间要小得多。这对于加密算法在IC卡上的应用具有特别重要的意义。

    带宽要求低。当对长消息进行加解密时,三类密码系统有相同的带宽要求,但应用于短消息时ECC带宽要求却低得多。带宽要求低使ECC在无线网络领域具有广泛的应用前景。

    加密算法的选择

    由于非对称加密算法的运行速度比对称加密算法的速度慢很多,当我们需要加密大量的数据时,建议采用对称加密算法,提高加解密速度。

    对称加密算法不能实现签名,因此签名只能非对称算法。

    由于对称加密算法的密钥管理是一个复杂的过程,密钥的管理直接决定着他的安全性,因此当数据量很小时,我们可以考虑采用非对称加密算法。

    在实际的操作过程中,我们通常采用的方式是:采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,这样我们就集成了两类加密算法的优点,既实现了加密速度快的优点,又实现了安全方便管理密钥的优点。那采用多少位的密钥呢? RSA建议采用1024位的数字,ECC建议采用160位,AES采用128为即可。

    总结

    1.通过简单的URLENCODE + BASE64编码防止数据明文传输

    2 对普通请求、返回数据,生成MD5校验(MD5中加入动态密钥),进行数据完整性(简单防篡改,安全性较低,优点:快速)校验。 

    3 对于重要数据,使用RSA进行数字签名,起到防篡改作用。

    4 对于比较敏感的数据,如用户信息(登陆、注册等),客户端发送使用RSA加密,服务器返回使用DES(AES)加密。

    原因:客户端发送之所以使用RSA加密,是因为RSA解密需要知道服务器私钥,而服务器私钥一般盗取难度较大;如果使用DES的话,可以通过破解客户端获取密钥,安全性较低。而服务器返回之所以使用DES,是因为不管使用DES还是RSA,密钥(或私钥)都存储在客户端,都存在被破解的风险,因此,需要采用动态密钥,而RSA的密钥生成比较复杂,不太适合动态密钥,并且RSA速度相对较慢,所以选用DES)





    展开全文
  • iOS 3DES加密 和 java 3DES 解密

    万次阅读 2013-01-08 20:01:51
    对称加密算法 3desiOS 客户端加密算法 首先进入头文件: #import #import #import -(NSString*)TripleDES:(NSString*)plainText encryptOrDecrypt:(CCOperation)encryptOrDecrypt { const void ...

     对称加密算法 3des 在iOS 客户端加密算法

    首先进入头文件:

    #import <CommonCrypto/CommonDigest.h>  

    #import <CommonCrypto/CommonCryptor.h>

    #import <Security/Security.h>


    -(NSString*)TripleDES:(NSString*)plainText encryptOrDecrypt:(CCOperation)encryptOrDecrypt
    {
        
        const void *vplainText;
        size_t plainTextBufferSize;
        
        if (encryptOrDecrypt == kCCDecrypt)//解密
        {
            NSData *EncryptData = [GTMBase64 decodeData:[plainText dataUsingEncoding:NSUTF8StringEncoding]];
            plainTextBufferSize = [EncryptData length];
            vplainText = [EncryptData bytes];
        }
        else //加密
        {
            NSData* data = [plainText dataUsingEncoding:NSUTF8StringEncoding];
            plainTextBufferSize = [data length];
            vplainText = (const void *)[data bytes];
        }
        
        CCCryptorStatus ccStatus;
        uint8_t *bufferPtr = NULL;
        size_t bufferPtrSize = 0;
        size_t movedBytes = 0;
        
        bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);
        bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t));
        memset((void *)bufferPtr, 0x0, bufferPtrSize);
        // memset((void *) iv, 0x0, (size_t) sizeof(iv));
        
        const void *vkey = (const void *)[DESKEY UTF8String];
        // NSString *initVec = @"init Vec";
        //const void *vinitVec = (const void *) [initVec UTF8String];
        //  Byte iv[] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};
        ccStatus = CCCrypt(encryptOrDecrypt,
                           kCCAlgorithm3DES,
                           kCCOptionPKCS7Padding | kCCOptionECBMode,
                           vkey,
                           kCCKeySize3DES,
                           nil,
                           vplainText,
                           plainTextBufferSize,
                           (void *)bufferPtr,
                           bufferPtrSize,
                           &movedBytes);
        //if (ccStatus == kCCSuccess) NSLog(@"SUCCESS");
        /*else if (ccStatus == kCC ParamError) return @"PARAM ERROR";
         else if (ccStatus == kCCBufferTooSmall) return @"BUFFER TOO SMALL";
         else if (ccStatus == kCCMemoryFailure) return @"MEMORY FAILURE";
         else if (ccStatus == kCCAlignmentError) return @"ALIGNMENT";
         else if (ccStatus == kCCDecodeError) return @"DECODE ERROR";
         else if (ccStatus == kCCUnimplemented) return @"UNIMPLEMENTED"; */
        
        NSString *result;
        
        if (encryptOrDecrypt == kCCDecrypt)
        {
            result = [[[NSString alloc] initWithData:[NSData dataWithBytes:(const void *)bufferPtr
                                                                    length:(NSUInteger)movedBytes]
                                            encoding:NSUTF8StringEncoding]
                      autorelease];
        }
        else
        {
            NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
            result = [GTMBase64 stringByEncodingData:myData];
        }
        
        return result;
    }
    

    上面还有个DESKEY宏定义是

    #define kChosenDigestLength		CC_SHA1_DIGEST_LENGTH
     
    #define DESKEY @"D6D2402F1C98E208FF2E863AA29334BD65AE1932A821502D9E5673CDE3C713ACFE53E2103CD40ED6BEBB101B484CAE83D537806C6CB611AEE86ED2CA8C97BBE95CF8476066D419E8E833376B850172107844D394016715B2E47E0A6EECB3E83A361FA75FA44693F90D38C6F62029FCD8EA395ED868F9D718293E9C0E63194E87"


    java客户端 3DES 解密和加密算法

    public static String encryptThreeDESECB(String src,String key) throws Exception
    {
        DESedeKeySpec dks = new DESedeKeySpec(key.getBytes("UTF-8"));
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
        SecretKey securekey = keyFactory.generateSecret(dks);
        
        Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, securekey);
        byte[] b=cipher.doFinal(src.getBytes());
        
        BASE64Encoder encoder = new BASE64Encoder();
        return encoder.encode(b).replaceAll("\r", "").replaceAll("\n", "");
        
    }
    
    //3DESECB解密,key必须是长度大于等于 3*8 = 24 位
    public static String decryptThreeDESECB(String src,String key) throws Exception
    {
        //--通过base64,将字符串转成byte数组
        BASE64Decoder decoder = new BASE64Decoder();
        byte[] bytesrc = decoder.decodeBuffer(src);
        //--解密的key
        DESedeKeySpec dks = new DESedeKeySpec(key.getBytes("UTF-8"));
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
        SecretKey securekey = keyFactory.generateSecret(dks);
        
        //--Chipher对象解密
        Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, securekey);
        byte[] retByte = cipher.doFinal(bytesrc);
        
        return new String(retByte);
    }
    



    亲自测试方法都ok!


    展开全文
  • 任何应用的开发中安全都是重中之重,在信息交互异常活跃的现在,信息加密技术显得尤为重要。在app应用开发中,我们需要对应用中的多项数据进行加密处理,从而来保证应用上线后的安全性,给用户一个安全保障。 本节...

    任何应用的开发中安全都是重中之重,在信息交互异常活跃的现在,信息加密技术显得尤为重要。在app应用开发中,我们需要对应用中的多项数据进行加密处理,从而来保证应用上线后的安全性,给用户一个安全保障。
    本节只讲原理和应用,具体的代码请到这里下载,都是封装好的工具类,包括终端命令操作。下面介绍常用三种加密。

    一、哈希HASH

    1.MD5加密

    MD5加密的特点:

    1. 不可逆运算
    2. 对不同的数据加密的结果是定长的32位字符(不管文件多大都一样)
    3. 对相同的数据加密,得到的结果是一样的(也就是复制)。
    4. 抗修改性 : 信息“指纹”,对原数据进行任何改动,哪怕只修改一个字节,所得到的 MD5 值都有很大区别.
    5. 弱抗碰撞 : 已知原数据和其 MD5 值,想找到一个具有相同 MD5 值的数据(即伪造数据)是非常困难的.
    6. 强抗碰撞: 想找到两个不同数据,使他们具有相同的 MD5 值,是非常困难的

    MD5 应用:

    一致性验证:MD5将整个文件当做一个大文本信息,通过不可逆的字符串变换算法,产生一个唯一的MD5信息摘要,就像每个人都有自己独一无二的指纹,MD5对任何文件产生一个独一无二的数字指纹。

    那么问题来了,你觉得这个MD5加密安全吗?其实是不安全的,不信的话可以到这个网站试试:md5破解网站。可以说嗖地一下就破解了你的MD5加密!!!

    2.加“盐”

    可以加个“盐”试试,“盐”就是一串比较复杂的字符串。加盐的目的是加强加密的复杂度,这么破解起来就更加麻烦,当然这个“盐”越长越复杂,加密后破解起来就越麻烦,不信加盐后然后MD5加密,再去到md5破解网站破解试试看,他就没辙了!!!

    哈哈,这下应该安全了吧!答案是否定的。如果这个“盐”泄漏出去了,不还是完犊子吗。同学会问,“盐”怎么能泄漏出去呢?其实是会泄漏出去的。比如苹果端、安卓端、前端、后台等等那些个技术人员不都知道吗。。都有可能泄漏出去。又有同学说那就放在服务器吧,放在服务器更加不安全,直接抓包就抓到了!!!

    加固定的“盐”还是有太多不安全的因素,可以看出没有百分百的安全,只能达到相对安全(破解成本 > 破解利润),所以一些金融的app、网站等加密比较高。

    下面来介绍另外两种加密方案

    3.SHA加密

    安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。当让除了SHA1还有SHA256以及SHA512等。

    SHA1有如下特性:不可以从消息摘要中复原信息;两个不同的消息不会产生同样的消息摘要。

    4.HMAC加密

    HMAC:给定一个密钥,对明文加密,做两次“散列”,得到的结果还是32为字符串。在实际开发中,密钥是服务器生成,客户端发送请求会拿到KEY。一个账号对应一个KEY

    以注册为例:当用户把账号提交给服务器,服务器会验证账号的合法性,如果合法就会生成个KEY给客户端(这个KEY只有在注册的时候会出现一次,一个账号只对应一个KEY);客户端会用拿到的KEY给密码用HMAC方式加密(32位字符串)发给服务器,最终服务器会保存这个HMAC密码。这样就注册成功了!以后再登录就会服务器就会比对这个HMAC密码是否相等决定能否登录成功。

    这里写图片描述

    这样一来好像安全了很多哎!即使黑客拿到了客户KEY,也只能拿到一个用户的信息,也就是说只丢失了一个客户的信息。然而上面的加“盐”方式加密,如果“盐”泄漏了,那丢失的可是所有用户信息啊。安全性有了很大提升有木有!!!

    但是这还是不够安全,还可以更佳安全!

    以登录为例:当用户点击登录时,会生成HMAC密码,然后用HMAC密码拼接上一个时间串(服务器当前时间,201801171755,只到分钟),然后一起MD5加密,最后客户端会把加上时间的HMAC值发给服务器;这时候服务器也会用已经存起来的HMAC密码拼接上一个时间串(服务器当前时间),然后一起MD5加密,最后用这个加密后的HMAC值和客户端发来的进行HMAC值对比,对此一样则登录成功!!!

    这里写图片描述

    疑问1.为什么一定要用服务器的时间呢?
    答:因为客户端可能会修改自己的手机时间,以服务器为准比较好。
    疑问2.如果网络有延迟怎么办?
    答:这里服务器可以对比两次,再往后加一分钟对比一次。试想一下如果网络延迟了两分钟,还没请求到时间,那这个网络也是够了!!!
    疑问3.为什么不让服务器直接修改KEY呢?
    答:这样也能保证每次登录的HMAC值不一样?注意:这样做服务器会频繁的更新KEY,加大服务器的压力,一般不会去更新,除非更换密码才会更新。当然服务器可以定期去更新KEY,这样安全等级又会提高,更加安全!!

    这个时候如果黑客拦截到了你加了时间戳的HMAC值,不能在两分钟内破解密码,那么他就永远登不进去了。这个密码的破解难度是很大的,代价也高,这样是不是就很安全了,是的,这样就更加安全!!!

    二、对称加密

    简介:
    对称加密算法又称传统加密算法。
    加密和解密使用同一个密钥。

    加密解密过程:明文->密钥加密->密文,密文->密钥解密->明文。

    示例:
    密钥:X
    加密算法:每个字符+X
    明文:Hello
    密钥为 1时加密结果:Ifmmp
    密钥为 2时加密结果:Jgnnq

    优缺点:
    算法公开,计算量小,加密速度快,加密效率高
    双方使用相同的钥匙,安全性得不到保证

    注意事项:
    密钥的保密工作非常重要
    密钥要求定期更换

    经典加密算法有三种:
    1. DES(Data Encryption Standard):数据加密标准(现在用的比较少,因为它的加密强度不够,能够暴力破解)
    2. 3DES:原理和DES几乎是一样的,只是使用3个密钥,对相同的数据执行三次加密,增强加密强度。(缺点:要维护3个密钥,大大增加了维护成本)
    3. AES(Advanced Encryption Standard):高级加密标准,目前美国国家安全局使用的,苹果的钥匙串访问采用的就AES加密。是现在公认的最安全的加密方式,是对称密钥加密中最流行的算法。

    加密模式:
    ECB:电子密码本,就是每个块都是独立加密

    这里写图片描述

    CBC:密码块链,使用一个密钥和一个初始化向量(IV)对数据执行加密转换

    这里写图片描述

    只要是对称加密都有 ECB和 CBC模式,加密模式是加密过程对独立数据块的处理。对于较长的明文进行加密需要进行分块加密,在实际开发中,推荐使用CBC的,ECB的要少用。

    三、非对称加密RSA

    简介:
    1. 对称加密算法又称现代加密算法。
    2. 非对称加密是计算机通信安全的基石,保证了加密数据不会被破解。
    3. 非对称加密算法需要两个密钥:公开密钥(publickey) 和私有密(privatekey)
    4. 公开密钥和私有密钥是一对

    如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密。
    如果用私有密钥对数据进行加密,只有用对应的公开密钥才能解密。

    特点:
    算法强度复杂,安全性依赖于算法与密钥。
    加密解密速度慢。

    与对称加密算法的对比:
    对称加密只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。
    非对称加密有两种密钥,其中一个是公开的。

    RSA应用场景:
    由于RSA算法的加密解密速度要比对称算法速度慢很多,在实际应用中,通常采取
    数据本身的加密和解密使用对称加密算法(AES)。
    用RSA算法加密并传输对称算法所需的密钥。

    展开全文
  • 这两天在做iOS和Android客户端与Java服务器端的数据加密与解密,一开始使用的是DES,但是觉得不够安全而且速度较慢,所以后来换成了AES。两种方式中,总是有两端生成的密文不一致的问题出现,经过蛋疼的调试,最终...
  • 3DES加密认识与使用

    千次阅读 2016-11-08 17:21:03
    3DES是三重数据加密算法块密码的通称,听到名字就知道与DES加密有关,简单的理解为用DES加密三次,通过增加DES的密钥长度来避免暴力破解。 3DES算法是指使用双长度(16字节)密钥K=(KL||KR)将8字节明文数据块进行...
  • 几种加密方式

    万次阅读 2016-09-06 09:55:11
    几种加密方式 1 Base64加密方式(可逆) Base64中的可打印字符包括字母A-Z/a-z/数组0-9/ 加号’+’斜杠’/’ 这样共有62个字符 Base64 ios7之后加入系统库   2 MD5加密 Message Digest Algorithm MD5...
  • 查了相关的资料,用的最多的几种加密算法,DES、AES、3DES等,考虑到手机端的兼容,先用了DES。但我遇到一个现象后,让我决定放弃DES,不知道有没有大神也遇到过,就是我用DES加密后,再用AES加密DES解密后的内容。...
  • ios平台加密相关

    千次阅读 2015-05-14 18:27:17
    Android、iPhone和Java三个平台一致的加密工具 ...几种常见加密算法初窥及如何选用加密算法 iPhone中3DES+Base64 加密解密的代码 IOS学习十五:通信加密 iOS中用到的3DES密码算法
  • c++与java互相进行3des加解密

    千次阅读 2016-05-25 20:38:04
    这一点,android显然具有先天优势,对jdk的基本算法都会支持,但ios就不能支持3des的所有加密模式了,那么为了ios也能适应java的多种加密模式才有了本文的探索。1、des3des 3des是对des进行3加密后的结果,3...
  • 3DES加密算法简析

    千次阅读 2016-01-26 22:53:45
    3DES加密算法并非什么新的加密算法,而是DES算法的另一种模式。是现在比较常用的一种对称加密算法,比起DES来说安全性更高。该算法的加解密过程分别是对明文/密文数据进行三次DES加密或解密,得到相应的密文或明文。...
  • iOS常见加密算法原理

    千次阅读 2016-07-30 15:07:50
    .MD5加密 MD5加密是最常用的加密方法之一,是从一段字符串中通过相应特征生成一段32位的数字字母混合码。 MD5主要特点是 不可逆,相同数据的MD5值肯定一样,不同数据的MD5值不一样(也不是绝对的,但基本是不能...
  • iOS3DES加密算法的原理

    千次阅读 2015-12-21 14:17:00
    要理解3DES,就必须先...这里需要注意的是,由于DES加密解密时要求数据长度必须为8个字节的倍数,因此当数据长度不足时必须先进行数据填充,这里使用的填充算法根据系统的不同可能会略有不同。 DES算法有两种工作
  • iOS 加密算法之MD5加密使用

    千次阅读 2020-06-05 21:42:28
    软件开发过程中,对数据进行加密是保证数据安全的重要手段,常见的加密有Base64加密和MD5加密。Base64加密是可逆的,MD5加密目前来说一般是不可逆的。我们在开发一款iOS App过程中,对于发送的请求,其中有个“sign...
  • [iOS]加密解密算法

    千次阅读 2014-05-27 10:01:45
    未提及RSA加密算法的相关信息)。 对数据加密后进行保存/传输用得较多的是AES和DES,都是对称加密,相对来说AES速度块,安全性高,3DES使用三个密钥,虽然安全性得到大幅度提高,但是加密速度明显慢了,目前广泛...
  • kCCAlgorithm3DES,// 加密根据哪个标准(des3des,aes。。。。) kCCOptionPKCS7Padding,// 选项分组密码算法(des:对每块分组加一次密 3DES:对每块分组加三个不同的密) vkey, //密钥 加密和解密的密钥必须一致...
  • 关于加签

    千次阅读 2016-12-20 15:59:43
    RSA:  1. 加签:用私钥加签,...一般都是字符串转换成NSData ,然后在用各种加密,base64,des3des,MD5等等(因为大多数支持的类型是data类型)。 然后data再转换回来 字符串。。。  NSSTring *result;  [result
  • iOS散列(HASH)算法

    千次阅读 2018-05-31 08:43:24
    总结一篇常用的加密算法文章。 1、常用加密算法 1.1 哈希(散列)函数 - MD5 - SHA1 - SHA256/512 特点 - 算法公开的 - 对相同的数据加密,得到的结果是一样的 - 对不同的数据进行加密,得到的结果都是定长 MD5...
  • 密钥分散算法简析

    千次阅读 2016-01-26 18:41:41
    密钥分算算法简称Diversify,是指将一个双长度(一个长度密钥为8个字节)的主密钥(MK),对数据进行分散处理,推导出一个双长度的DES加密密钥(DK)。该算法广泛应用于现在的金融IC卡和其他对于安全要求高的行业。其DK...
1 2 3 4 5 ... 20
收藏数 2,008
精华内容 803
关键字:

3des加密算法 ios