精华内容
下载资源
问答
  • MD5加密MD5加密MD5加密

    2010-03-03 12:08:27
    MD5加密MD5加密MD5加密MD5加密MD5加密
  • iOS 加密算法之MD5加密使用

    千次阅读 2016-07-01 16:29:17
    软件开发过程中,对数据进行加密是保证数据安全的重要手段,常见的加密有Base64加密MD5加密。Base64加密是可逆的,MD5加密目前来说一般是不可逆的。我们在开发一款iOS App过程中,对于发送的请求,其中有个“sign...

    2020.06.04编辑

    前言

    对于加密算法这个概念我的确不太清楚,虽然我知道加密算法存在的意义,但是这并不妨碍我不知道加密算法具体都有哪些。所以今天这篇文章就是了大家一起学习开发中哪些加密算法。

    在学习加密算法之前,我们先给自己提出三个问题:什么是加密算法?为什么用加密算法?怎么用加密算法?

    接下来,让我们带着这些问题开始今天的学习之旅吧!

    正文

    1. 什么是加密算法?为什么用加密算法?

    据说,公元前400年,古希腊人就发明了置换密码。1881年世界上的第一个电话保密专利出现。在第二次世界大战期间,德国军方启用“恩尼格码”密码机,密码学在战争中起到非常重要的作用。

    就算是在那些谍战的电视剧和电影中,我们也可以感受到信息安全和保密的重要性,正所谓牵一发而动全身,信息泄露在生活中的任何一方面都有可能给当事人或集体造成巨大的打击。密码学的存在就是为了提高数据的保密性、保证数据的完整性还有用于身份验证,可以校验双方的真实性。(看到这里是不是有点点熟悉的感觉,其实这也是HTTPS的特点。)

    那么加密算法就是应用密码学的一种可以进行数据加密的算法。其中有些可以解密,有些不可解密。

    2. 怎么用加密算法?

    不同类型的加密算法使用方法也不一样,加密算法通常分为两大类:“对称式”和“非对称式”。

    2.1 对称式加密

    对称加密算法 是应用较早的加密算法,又称为 共享密钥加密算法。在对称加密算法中,使用的密钥只有一个,发送和接收双方都使用这个密钥数据进行加密解密。这就要求加密和解密方事先都必须知道密钥是什么。

    1.数据加密过程:在对称加密算法中,数据发送方明文(原始数据)和加密密钥一起经过特殊加密处理,生成复杂的加密密文进行发送。

    2.数据解密过程:数据接收方收到密文后,如果想要读取原始数据,就需要使用加密使用的密钥及相同算法的逆算法对加密的密文进行解密,才能让密文恢复成可读明文

    2.2 非对称式加密

    非对称加密算法 又称为 公开密钥加密算法。它和对称加密算法不同的是它需要两个密钥,一个称为公开密钥(public key),即公钥,一个称为私有密钥(private key),就是我们常说的私钥

    因为加密和解密使用的是两个不同的密钥,所以这种算法叫做 非对称加密算法。

    1.数据加密过程:数据发送方将明文经过某种协定好的密钥特殊加密处理,生成复杂的加密密文进行发送。

    2.数据解密过程:数据接收方收到密文后,使用对应的另一种密钥对加密的密文进行解密,将密文解密成原始数据。

    注意:

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

    如果使用私钥对数据进行加密,就得用对应的公钥进行解密。

    3.常见的加密算法

    3.1 MD5算法(加密不可逆)

    MD5就是Message-Digest Algorithm 5(信息-摘要算法),因为使用的是哈希函数,所以也被译为哈希算法。它的典型应用就是对一段信息产生信息摘要,以防止被篡改。严格来说,MD5不是一种加密算法而是摘要算法,因为无论是多长的输入,MD5总是会出输出长度固定为128bit的一个字符串。128bit就是128个0和1的二进制位,而在实际应用开发中,通常是以16进制输出的,所以正好就是32位的16进制,说白了也就是32个16进制的数字。MD5是一种不可逆算法,具有很高的安全性。

    iOS MD5加密的方法如下:

    #import <CommonCrypto/CommonDigest.h>
    - (NSString *)md5:(NSString *)str
    {
        const char *cStr = [str UTF8String];
        unsigned char digest[CC_MD5_DIGEST_LENGTH];//CC_MD5_DIGEST_LENGTH = 16
        CC_MD5(cStr, strlen(cStr), digest); // This is the md5 call
        NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
        for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
            [output appendFormat:@"%02x", digest[i]];
        return output;
    }

    其中%02x是格式控制符:x表示以16进制输出,02表示不足两位,前面补0。

    从代码中我们可以看出result是个字符数组,为什么我们定义容量为16呢?因为前面也讲到了MD5算法输出是128bit,一个字符是一个字节是8个bit,那么128 / 8 = 16,所以需要16个char,所以result的容量是16。

    那么为什么输出的格式一定是%02x呢?因为前面也讲到了MD5算法通常是以16进制输出的,所以就是把128个二进制的字节转换为16进制表示,每4位二进制对应一位16进制的元素,就需要32个16进制的元素,如果元素全部是0,放到char的数组中,正常是不会输出,如00001111,用%x就是16进制输出就得到f的值,就会丢失0,最后8位二进制数只表示成了1位16进制,但如果以%02x表示则输出结果是0f,正好是转换的正确结果。

    所以以上就是char[16]和%02x的来历。

    至于人们说的16位MD5加密,其实是这样的:举例如果产生的MD5加密字符串是:01234567abcdefababcdefab76543210,则16位的MD加密字符是abcdefababcdefab,也就是只是截取了中间的16位。实际上这个操作已经不是MD5加密算法所包括的,而应当是对MD5加密算法结果的二次处理。其它的64位和大小写什么的,都属于对MD5算法结果的二次处理。因为MD5算法产生的结果就是128bit,128个二进制数字。

    3.2 SHA1算法(加密不可逆)

    SHA1就是Secure Hash Algorithm 1(安全散列算法),它基于MD5,加密后的数据长度更长,对于长度小于2^{64}位的消息,SHA 1会产生一个160bit的消息摘要,比MD5多32bit,因此,SHA1比MD5的安全性更强,但是运算速度就比MD5慢了。

    基于MD5、SHA1的信息摘要特性以及不可逆(一般而言),可以被应用在检查文件完整性、数字签名等场景。

    使用方法和MD5一样,将CC_MD5变成CC_SHA1就可以啦!

    #import <CommonCrypto/CommonDigest.h>
    - (NSString*)sha1:(NSString *)str{
        const char *cStr = [str UTF8String];
        //使用对应的CC_SHA1,CC_SHA256,CC_SHA384,CC_SHA512的长度分别是20,32,48,64
        uint8_t digest[CC_SHA1_DIGEST_LENGTH];
        //使用对应的CC_SHA256,CC_SHA384,CC_SHA512
        CC_SHA1(cStr, strlen(cStr), digest);
        NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
        for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
            [output appendFormat:@"%02x", digest[i]];
        return output;
    }

    3.3 HMAC算法

    HMAC是Hash-based Message Authentication Code(哈希运算消息认证码),HMAC运算利用哈希算法(MD5、SHA1等),以一个密钥一个消息为输入,生成一个消息摘要作为输出。该算法用于登录可以实现类似QQ设备锁的功能。

    HMAC发送方和接收方都有key进行计算,而没有这把key的第三方,就无法计算出正确的散列值,这样就可以防止数据被篡改。

    #import <CommonCrypto/CommonHMAC.h>
    /*!
        @enum       CCHmacAlgorithm
        @abstract   Algorithms implemented in this module.
    
        @constant   kCCHmacAlgSHA1        HMAC with SHA1 digest
        @constant   kCCHmacAlgMD5          HMAC with MD5 digest
        @constant   kCCHmacAlgSHA256    HMAC with SHA256 digest
        @constant   kCCHmacAlgSHA384    HMAC with SHA384 digest
        @constant   kCCHmacAlgSHA512    HMAC with SHA512 digest
        @constant   kCCHmacAlgSHA224    HMAC with SHA224 digest
     */
    - (NSString *)hmacMd5:(NSString *)str key:(NSString *)key {
        const char *cStr = [str UTF8String];
        const char *kStr = [key UTF8String];
        unsigned char digest[CC_MD5_DIGEST_LENGTH];
        CCHmac(kCCHmacAlgMD5, kStr, strlen(kStr), cStr, strlen(cStr), digest);
        NSMutableString* output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
        for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i ++) {
            [output appendFormat:@"%02x", digest[i]];
        }
        return output;
    }

    3.4 AES/DES/3DES算法

    3.4.1 DES算法

    DES是Data Encryption Standard(数据加密标准),是一种对称分组密钥算法。它的密钥是一个64bit(也就是8个字节)的数据,每8位(一个字节)用作奇偶校验位,实际使用到的长度是56位,加密解密都是用同一算法。DES是对密钥进行保密,而公开算法,包括加密和解密算法。这样,只有掌握了和发送方相同密钥的人才能解读由DES加密算法加密的密文数据。因此,破译DES就是搜索密钥的编码。对于56位长度的密钥来说,如果用穷举法来搜索的话,运算次数是2^{56}次。

    DES有两种工作模式:ECB和CBC。

    将数据64位也就是8个字节进行分组对数据加密,从而得到一段或几段8个字节的密文,最后按照他们的顺序将计算得到的数据连在一起,各段数据之间互不影响,解密和加密是一样的,这是DES的ECB(电子密本方式)的工作模式。(注意:DES加密解密时要求数据长度必须从是8个字节的倍数,因此当长度不足的时候必须先进行数据填充,这里使用的填充算法根据系统的不同可能略有不同。)另一种工作模式CBC(密文分组链接方式)是在每一段加密或者解密的过程中都要与前一段的结果做一次异或操作。同时CBC模式定义了一个特殊的8字节key(初始化向量),用来和第一段的结果做异或时用。这种机制使得加密的各段数据之间有了联系。

    CBC的加密步骤如下:
    1、首先将数据按照8个字节一组进行分组得到D1D2......Dn(若数据长度不是8字节的整数倍,先进行数据填充)
    2、第一组数据D1与初始化向量I异或后的结果进行DES加密得到第一组密文C1
    3、第二组数据D2与第一组的加密结果C1异或以后的结果进行DES加密,得到第二组密文C2
    4、之后的数据以此类推,得到Cn
    5、按顺序连为C1C2C3......Cn即为加密结果。

    CBC的解密步骤如下:
    1、首先将数据按照8个字节一组进行分组得到C1C2C3......Cn
    2、将第一组数据进行解密后与初始化向量I进行异或得到第一组明文D1(注意:一定是先解密再异或)
    3、将第二组数据C2进行解密后与第一组密文数据进行异或得到第二组数据D2
    4、之后依此类推,得到Dn
    5、按顺序连为D1D2D3......Dn即为解密结果。

    注意:解密的结果并不一定是我们原来的加密数据,可能还含有你补得位,一定要把补位去掉才是原来的数据。)

    #import <CommonCrypto/CommonCryptor.h>
    //DES算法的CBC模式
    - (NSString *)des:(NSString *)str key:(NSString *)key andiv:(NSString *)iv
    {
        NSData *strData = [str dataUsingEncoding:NSUTF8StringEncoding];
        NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding];
        //这个iv 是DES加密的初始化向量,可以用和密钥一样的MD5字符
        NSData *ivData = [iv dataUsingEncoding:NSUTF8StringEncoding];
        NSInteger bufferLength = (strData.length / 1024 + 1) * 1024;
        unsigned char *buffer = (unsigned char *)malloc(bufferLength);
        memset(buffer, 0, sizeof(char) * bufferLength);
        size_t numBytesEncrypted = 0;
        CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,//加密模式 kCCDecrypt 代表解密
                kCCAlgorithmDES,//加密方式
                kCCOptionPKCS7Padding,//填充算法
                keyData.bytes, //密钥字符串
                kCCKeySizeDES,//加密位数
                ivData.bytes,//初始化向量
                strData.bytes,//明文
                strData.length,
                buffer, bufferLength,
                &numBytesEncrypted);
        NSString *ciphertext = nil;
        if (cryptStatus == kCCSuccess) {
            NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
            ciphertext = [data base64EncodedStringWithOptions:0];
            return ciphertext;
        } else {
            return nil;
        }
    }

    3.4.2 3DES算法

    3DES是Triple Data Encryption Algorithm(三重数据加密算法)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。

    是DES向AES过渡的加密算法,它使用3条64位(实际上只用到了56位)的密钥对数据进行三次加密,是DES的一个更安全的变形,它是以DES为基本模块,通过组合分组方法设计出分组加密算法。

    假如 Ek() 和 Dk() 分别代表DES的加密和解密过程。k 代表DES使用的密钥,P 代表明文,C 代表密文。

    3DES的加密过程可表示为

    C = Ek3(Dk2(Ek1(P))):用密钥1加密,然后用密钥2解密,然后用密钥3加密。

    P = Dk1(Ek2(Dk3(C))):用密钥3解密,然后用密钥2加密,然后用密钥1解密。

    注意:这里可以k1=k3,但不能k1=k2=k3(如果相等的话就成了DES算法了)。

    3.4.3 AES算法(需要密钥才能解密)

    AES是Advanced Encryption Standard(高级加密标准),又称Rijndael加密法。它采用对称分组密码体制,密钥长度的最少支持为128位,192位,256位,分组长度128位,算法应用于各种硬件和软件实现。这种加密算法是美国联邦政府采用的区块加密标准。微信小程序中的加密传输就是使用的AES加密算法。

    AES本身就是为了取代DED的,它具有更好的安全性、效率和灵活性。

    在上图中各个部分的作用:

    明文P:没有经过加密的数据。

    密钥K:用来加密明文的密码,在对称加密中,加密和解密的密钥是相同的,所以密钥要保证安全,如果一旦密钥泄漏了,那么数据就基本上不存在安全性了。

    AES加密函数:设AES加密函数为E,则C = E(K,P),其中K为密钥,C为密文。所以通过加密函数E,可以把明文+密钥生成密文。

    密文C:经过加密处理后的数据。

    AES解密函数:如加密函数一样,设AES解密函数为D,则P = D(C,P),也就是说,可以通过解密函数D,将密文+密钥生成明文。

    3.5 RSA算法(公钥加密,私钥解密)

    RSA算法是一种非对称加密算法。因为在1977年由 Ron Rivest 和 Adi Shamir 以及 Leonard Adleman一起提出的,所以他们三人姓氏开头字母组成了RSA。

    RSA是目前最具影响力的公钥加密算法,并且被普遍认为是目前最优秀的公钥方案之一。RSA是第一个能同时用于加密和数字签名的算法。它能够抵抗到目前为止已知的所有密码共计。已被ISO推荐为公钥数据加密标准。

    RSA 加密算法 基于一个十分简单的数论事实:将两个大 素数 相乘十分容易,但想要对其乘积进行 因式分解 却极其困难,因此可以将 乘积 公开作为 加密密钥。

    3.6 ECC算法

    ECC是Error Correcting Code(错误检查和纠正),它也是一种非对称加密算法。主要优势是某些情况下,它比其他的方法使用更小的密钥,比如RSA加密算法,提供相当的或者更高等级的安全级别。不过有一个缺点就是加密和解密操作的实现比其他机制时间上。相比于RSA算法,这个算法对CPU的消耗更严重些。

     

    未完待续。

    对加密算法这部分还不是很明白,如果有大牛看见这篇文章还请指导我一下。感恩。

     

    参考文章:

    iOS 使用HMAC

    iOS DES、3DES加密

    iOS开发之Objective-c的AES加密和解密算法的实现

    iOS开发-AES加密

     

    展开全文
  • md5加密md5加密

    2010-01-28 21:25:17
    md5加密md5加密md5加密md5加密md5加密md5加密md5加密md5加密md5加密md5加密md5加密md5加密md5加密md5加密md5加密md5加密
  • MD5加密MD5加密

    2009-07-30 00:09:26
    MD5加密MD5加密MD5加密MD5加密MD5加密MD5加密MD5加密MD5加密MD5加密MD5加密
  • md5加密算法详解md5加密算法详解md5加密算法详解md5加密算法详解md5加密算法详解md5加密算法详解md5加密算法详解md5加密算法详解
  • 文件夹中包含使用MD5的js,md5.js和md5.min.js,具体了解可看md5.js
  • MD5 加密程序 MD5 加密程序 MD5 加密程序 MD5 加密程序 MD5 加密程序 MD5 加密程序
  • Django的MD5加密使用方法

    千次阅读 2019-03-04 19:18:13
    import hashlib #1,首先引入hashlib模块 def password_encrypt(pwd): md5 = hashlib.md5() # 2,实例化md5() 方法 ... md5.update(pwd.encode()) # 3,对字符串的字节类型加密 result = md5.hexdigest...

    import hashlib    #1,首先引入hashlib模块

    def password_encrypt(pwd):

            md5 = hashlib.md5()       # 2,实例化md5() 方法

            md5.update(pwd.encode())      # 3,对字符串的字节类型加密

            result = md5.hexdigest()        # 4,加密

            return result

    展开全文
  • 在Android开发过程中加密密码常常采用md5加密方式,然而如果服务器端采用PHP开发(php采用md5加密很简单,直接md5($str)),很可能与Java的md5加密不一致。以下方法是md5加密与php一致的源码: import java.math....
  • md5加密md5加密

    2010-08-03 13:31:06
    md5加密md5加密md5加密md5加密md5加密md5加密
  • md5加密算法md5加密算法md5加密算法md5加密算法md5加密算法md5加密算法md5加密算法
  • php md5加密 php md5加密

    2010-11-16 10:13:09
    php md5加密php md5加密php md5加密php md5加密
  • C# MD5加密C# MD5加密

    2010-02-26 13:01:59
    C# MD5加密C# MD5加密C# MD5加密C# MD5加密C# MD5加密
  • MD5加密软件MD5加密软件MD5加密软件MD5加密软件
  • MD5加密--加盐MD5加密

    2018-03-13 13:19:04
    输入需要加密的字符串,有两种加密方式,普通md5加密和加盐MD5加密。根据需要生成。
  • MD5加密文档

    2018-04-17 08:49:53
    MD5加密java工具类,用于加密密码,使用MD5加密使用,希望有所帮助
  • 多数支付网关使用的都是标准的MD5加密,但也有特殊的加密方式。例如易宝使用hmac-md5,支付宝使用非标准的MD5加密。看上去他们的接口程序都比较复杂,实际几句代码就能实现,就是说可以把接口程序合成一个程序来...
  • java的MD5加密程序java的MD5加密程序java的MD5加密程序java的MD5加密程序java的MD5加密程序java的MD5加密程序
  • Java-MD5加密

    万次阅读 2021-01-19 08:57:37
    密码加密 一般使用 MD5 加密特点:一旦加密之后 ,就不可解密 光是MD5加密 还不够安全 ,这时候就要添加盐值: 盐值作用:让你的密码更加安全, MD5:支持加密次数 MD5加密三个概念: MD5常规加密,为了让你的密码...

    密码全是明文,防止内部人员监守自盗,改成暗文

    密码加密 一般使用 MD5

    加密特点:一旦加密之后 ,就不可解密

    光是MD5加密 还不够安全 ,这时候就要添加盐值:

    盐值作用:让你的密码更加安全,

    MD5:支持加密次数

    MD5加密三个概念: MD5常规加密,为了让你的密码更加安全,MD5加密还要加盐值,为了让你的密码超级安全,它支持加密次数 MD5Utils.encrypByMd5(String类型的密码)就执行加密

    
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    
    public class MD5Utils {
    
        /**
         * 加密
         * @param context
         */
        public static String encrypByMd5(String context) {
            try {  
                MessageDigest md = MessageDigest.getInstance("MD5");
                md.update(context.getBytes());//update处理  
                byte [] encryContext = md.digest();//调用该方法完成计算  
      
                int i;  
                StringBuffer buf = new StringBuffer("");  
                for (int offset = 0; offset < encryContext.length; offset++) {//做相应的转化(十六进制)  
                    i = encryContext[offset];  
                    if (i < 0) i += 256;  
                    if (i < 16) buf.append("0");  
                    buf.append(Integer.toHexString(i));  
               }  
                return buf.toString();
            } catch (NoSuchAlgorithmException e) {
                // TODO Auto-generated catch block  
                e.printStackTrace();
                return  null;
            }  
        }
    
        public static void main(String[] args) {
            //加密
            System.out.println(MD5Utils.encrypByMd5("123456"));
            //加密加盐 查询用户时,除了查到加密密码外,还能查到颜值。 把输入密码+盐值加密和数据库存放密码比对就OK
            System.out.println(MD5Utils.encrypByMd5("123456"+ StrUtils.getComplexRandomString(32)));
            System.out.println(MD5Utils.encrypByMd5("123456"+ StrUtils.getComplexRandomString(32)));
            System.out.println(MD5Utils.encrypByMd5("123456"+ StrUtils.getComplexRandomString(32)));
        }
    
    }
    
    展开全文
  • VB的md5加密VB的md5加密

    2009-02-24 09:36:50
    VB的md5加密VB的md5加密VB的md5加密VB的md5加密VB的md5加密VB的md5加密VB的md5加密VB的md5加密VB的md5加密VB的md5加密VB的md5加密VB的md5加密VB的md5加密VB的md5加密VB的md5加密VB的md5加密
  • javaMD5加密 MD5加密

    2009-08-25 18:27:14
    javaMD5加密 MD5加密javaMD5加密 MD5加密javaMD5加密 MD5加密javaMD5加密 MD5加密javaMD5加密 MD5加密javaMD5加密 MD5加密javaMD5加密 MD5加密javaMD5加密 MD5加密javaMD5加密 MD5加密javaMD5加密 MD5加密javaMD5...
  • 搞小程序开发,请求接口的加密部分用到md5,百度一大堆垃圾的js md5加密,每一个都正确,都是不支持中文的,爬墙才找到这个,希望大家别入坑...js md5加密md5支持utf-8加密,javascript md5加密,最好js md5加密
  • md5加密源代码md5加密源代码md5加密源代码md5加密源代码md5加密源代码
  • 主要介绍了Java实现DES加密与解密,md5加密以及Java实现MD5加密解密类 ,需要的朋友可以参考下
  • md5加密

    千次阅读 2018-12-27 17:22:47
    MD5 加密 使用qmd5必须先引入jquery!!! var md5Value=hex_md5(&quot;需要被加密的字符串&quot;); alert(&quot;加密后的值为:&quot;+md5Value); qmd5 下载引入地址

    MD5 加密

    使用qmd5必须先引入jquery!!!

    1. 在script标签中引入qmd5文件
    2. 在js中调用qmd5中的方法
        var md5Value=hex_md5("需要被加密的字符串"); 
        alert("加密后的值为:"+md5Value);  
    

    qmd5 下载引入地址

    展开全文
  • Golang MD5 加密使用方法

    千次阅读 2018-11-20 15:32:00
    h := md5.New() h.Write(data) output := h.Sum(nil) fmt.Println(fmt.Sprintf("%x",output)) 结果: e10adc3949ba59abbe56e057f20f883e 用法二: str:="123456" data:=[]byte(str) has:=md5.Sum(data) md...
  • MD5加密MD5加密

    2013-05-03 00:09:38
    MD4加密类,JDK原有的加密技术,其提供了简单的加密和解密
  • vb6.0 MD5 vb md5 加密

    2018-01-29 21:29:07
    md5 加密 VB6.0的 md5 加密 VB6.0的 md5 加密 VB6.0的 md5 加密 VB6.0的 md5 加密 VB6.0的

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 192,616
精华内容 77,046
关键字:

md5加密怎么用