精华内容
下载资源
问答
  • 常用js数据加密

    万次阅读 2019-11-21 11:20:27
    常用js数据加密 原生js已经支持base64加密及解密 //加密 window.btoa(this.shop) //解密 window.atob(this.shop)

    博客地址:http://www.globm.top/blog/1/detail/39
    常用js数据加密

    1. 原生js已经支持base64加密及解密
    //加密
    window.btoa(this.shop)
    
    //解密
    window.atob(this.shop)
    

    但是,window.btoa并不支持中文加密,可以使用曲线救国的方法

    //加密
    window.btoa(encodeURIComponent(this.company_name))
    //解密
    decodeURIComponent(window.atob(this.company_name))
    

    不过,使用encode中文转码在编译真的是‘曲线救国了’!

    1. md5加密

    MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致

    常用js md5库
    https://github.com/blueimp/JavaScript-MD5

    npm install crypto-js
    
    //使用crypto
    //md5.js
    import crypto from 'crypto';
    export default ({
    //将对象以‘键名=键值’方式存储到数组中,再以‘&’连接并加密,
      getSign(params){
        let objsort = this.objKeySort(params);
        let arr = [];
        for (let i in objsort) {
          arr.push((i + "=" + objsort[i]));
        }
        var  md5 = crypto.createHash("md5");
        md5.update(arr.join("&")); //需要加密的密码
        return md5.digest('hex').toUpperCase();  //password 加密完的密码
      },
      //排序的函数
      objKeySort(obj) {
        //先用Object内置类的keys方法获取要排序对象的属性名,再利用Array原型上的sort方法对获取的属性名进行排序,newkey是一个数组
        var newkey = Object.keys(obj).sort();
        var newObj = {};//创建一个新的对象,用于存放排好序的键值对
        for (var i = 0; i < newkey.length; i++) {//遍历newkey数组
          newObj[newkey[i]] = obj[newkey[i]];//向新创建的对象中按照排好的顺序依次增加键值对
        }
        return newObj;//返回排好序的新对象
      }
    })
    
    展开全文
  • 对称加密非对称加密不可逆加密算法 根据密钥类型不同可以将现代密码技术分为两类:对称加密算法(私钥密码体系)和非对称加密算法(公钥密码体系)。 1对称加密算法 原理 对称加密算法中,数据加密和解密采用的都是...

    对称加密 非对称加密 不可逆加密算法

    根据密钥类型不同可以将现代密码技术分为两类:对称加密算法(私钥密码体系)和非对称加密算法(公钥密码体系)。

    1 对称加密算法

    原理

    对称加密算法中,数据加密和解密采用的都是同一个密钥,因而其安全性依赖于所持有密钥的安全性。

    优点

    加密和解密速度快,加密强度高,且算法公开.

    缺点

    实现密钥的秘密分发困难,在大量用户的情况下密钥管理复杂,而且无法完成身份认证等功能,不便于应用在网络开放的环境中。

    特点

    算法公开、计算量小、加密速度快、加密效率高。

    著名算法

    目前最著名的对称加密算法有数据加密标准DES,但传统的DES由于只有56位的密钥,因此已经不适应当今分布式开放网络对数据加密安全性的要求。欧洲数据加密标准IDEA等,目前加密强度最高的对称加密算法是高级加密标准AES,AES提供128位密钥,128位AES的加密强度是56位DES加密强度的1021倍还多。。

    过程

    对称加密算法过程是将数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。

    不足之处是,交易双方都使用同样钥匙,安全性得不到保证。假设两个用户需要使用对称加密方法加密然后交换数据,则用户最少需要2个密钥并交换使用,如果企业内用户有n个,则整个企业共需要n×(n-1) 个密钥。

     

    2 非对称加密算法

    原理

    非对称加密算法使用两把完全不同但又是完全匹配的一对钥匙(即一把公开密钥或加密密钥和专用密钥或解密密钥)—公钥和私钥。在使用不对称加密算法加密文件时,只有使用匹配的一对公钥和私钥,才能完成对明文的加密和解密过程。加密明文时采用公钥加密,解密密文时使用私钥才能完成,而且发信方(加密者)知道收信方的公钥,只有收信方(解密者)才是唯一知道自己私钥的人。非对称加密算法的基本原理是,如果发信方想发送只有收信方才能解读的加密信息,发信方必须首先知道收信方的公钥,然后利用收信方的公钥来加密原文;收信方收到加密密文后,使用自己的私钥才能解密密文。

    优点

    非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要。

    加密和解密花费时间长、速度慢,它不适合于对文件加密而只适用于对少量数据进行加密。

     

    著名算法

     

    广泛应用的非对称加密算法有RSA算法和美国国家标准局提出的DSA。

     

    3 不可逆加密算法

    原理

         不可逆加密算法的特征是加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的,只有重新输入明文,并再次经过同样不可逆的加密算法处理,得到相同的加密密文并被系统重新识别后,才能真正解密。显然,在这类加密过程中,加密是自己,解密还得是自己,而所谓解密,实际上就是重新加一次密,所应用的“密码”也就是输入的明文。

    优点

    不可逆加密算法不存在密钥保管和分发问题,非常适合在分布式网络系统上使用。

    因加密计算复杂,工作量相当繁重,通常只在数据量有限的情形下使用,如广泛应用在计算机系统中的口令加密,利用的就是不可逆加密算法。近年来,随着计算机系统性能的不断提高,不可逆加密的应用领域正在逐渐增大。

    著名算法

    在计算机网络中应用较多不可逆加密算法的有RSA公司发明的MD5算法和由美国国家标准局建议的不可逆加密标准SHS(Secure Hash Standard:安全杂乱信息标准)等。

     

    注:

    对称加密算法、非对称加密算法和不可逆加密算法可以分别应用于数据加密、身份认证和数据安全传输。

    展开全文
  • AES加密过程详解

    万次阅读 多人点赞 2018-07-03 16:55:58
    AES加密过程涉及到4种操作,分别是字节替代、行移位、列混淆和轮密钥加。解密过程分别为对应的逆操作。由于每一步操作都是可逆的,按照相反的顺序进行解密即可恢复明文。加解密中每轮的密钥分别由初始密钥扩展得到。...

    AES算法流程

    AES加密过程涉及到 4 种操作,分别是字节替代行移位列混淆轮密钥加。解密过程分别为对应的逆操作。由于每一步操作都是可逆的,按照相反的顺序进行解密即可恢复明文。加解密中每轮的密钥分别由初始密钥扩展得到。算法中 16 个字节的明文、密文和轮密钥都以一个 4x4 的矩阵表示。 

    注意:前9次的加密过程是一样的,而最后一次的加密过程是没有列混淆的。

     

    1.字节替换:字节代替的主要功能是通过S盒完成一个字节到另外一个字节的映射。

    例如:字节66替换后的值为S[6][6]=33,再通过S-1即可得到替换前的值,S-1[3][3]=66。

     

    2.行移位:行移位的功能是实现一个4x4矩阵内部字节之间的置换。

    移位的操作是:第一行保存不变,第二行循环左移1个字节,第三行循环左移2个字节,第四行循环左移3个字节。

     

    3.列混淆:

    根据矩阵的乘法可知,在列混淆(利用域GF(28)上的算术特性的一个代替)的过程中,每个字节对应的值只与该列的4个值有关系。此处的乘法和加法需要注意如下几点:

    (1)将某个字节所对应的值乘以2,其结果就是将该值的二进制位左移一位,如果该值的最高位为1(表示该数值不小于128),则还需要将移位后的结果异或00011011

    (2)乘法对加法满足分配率,例如:07·S0,0=(01⊕02⊕04)·S0,0= S0,0⊕(02·S0,0)(04·S0,0)

    (3)此处的矩阵乘法与一般意义上矩阵的乘法有所不同,各个值在相加时使用的是模2加法(异或运算)。

        因为:说明两个矩阵互逆,经过一次逆向列混淆后即可恢复原文。

     

    4.轮密钥加:加密过程中,每轮的输入与轮密钥异或一次(当前分组和扩展密钥的一部分进行按位异或);因为二进制数连续异或一个数结果是不变的,所以在解密时再异或上该轮的密钥即可恢复输入。首尾使用轮密钥加的理由:若将其他不需要密钥的阶段放在首尾,在不用密钥的情况下就能完成逆过程,这就降低了算法的安全性。

    加密原理:轮密钥加本身不难被破解,另外三个阶段分别提供了混淆和非线性功能。可是字节替换、行移位、列混淆阶段没有涉及密钥,就它们自身而言,并没有提供算法的安全性。但该算法经历一个分组的异或加密(轮密钥加),再对该分组混淆扩散(其他三个阶段),再接着又是异或加密,如此交替进行,这种方式非常有效、非常安全。

     

    5.密钥扩展:其复杂性是确保算法安全性的重要部分。当分组长度和密钥长度都是128位时,AES的加密算法共迭代10轮,需要10个子密钥。AES的密钥扩展的目的是将输入的128位密钥扩展成11个128位的子密钥。AES的密钥扩展算法是以字为一个基本单位(一个字为4个字节),刚好是密钥矩阵的一列。因此4个字(128位)密钥需要扩展成11个子密钥,共44个字。

    密钥扩展过程说明:将初始密钥以列为主,转化为4个32 bits的字,分别记为w[0…3];按照如下方式,依次求解w[i],其中i是整数并且属于[4,43]。

    1)将w[i]循环左移一个字节。

    2)分别对每个字节按S盒进行映射。

     

    3)32 bits的常量(RC[i/4],0,0,0)进行异或,RC是一个一维数组,其中RC = {01, 02, 04, 08, 10, 20, 40, 80, 1B, 36}。

    4)除了轮密钥的第一列使用上述方法,之后的二到四列都是w[i]=w[i-4]⊕w[i-1]

     5)最终得到的第一个扩展密钥为(之后的每一轮密钥都是在前一轮的基础上按照上述方法得到的):

    展开全文
  • AES 加密算法的原理详解

    万次阅读 多人点赞 2018-07-23 22:18:49
    高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图: 下面简单介绍下各个部分的....

    本教程摘选自 https://blog.csdn.net/qq_28205153/article/details/55798628 的原理部分。

    AES简介

    高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图: 
    加密流程图
    下面简单介绍下各个部分的作用与意义:

    • 明文P

      没有经过加密的数据。

    • 密钥K

      用来加密明文的密码,在对称加密算法中,加密与解密的密钥是相同的。密钥为接收方与发送方协商产生,但不可以直接在网络上传输,否则会导致密钥泄漏,通常是通过非对称加密算法加密密钥,然后再通过网络传输给对方,或者直接面对面商量密钥。密钥是绝对不可以泄漏的,否则会被攻击者还原密文,窃取机密数据。

    • AES加密函数

      设AES加密函数为E,则 C = E(K, P),其中P为明文,K为密钥,C为密文。也就是说,把明文P和密钥K作为加密函数的参数输入,则加密函数E会输出密文C。

    • 密文C

      经加密函数处理后的数据

    • AES解密函数

      设AES解密函数为D,则 P = D(K, C),其中C为密文,K为密钥,P为明文。也就是说,把密文C和密钥K作为解密函数的参数输入,则解密函数会输出明文P。

    在这里简单介绍下对称加密算法与非对称加密算法的区别。

    • 对称加密算法

      加密和解密用到的密钥是相同的,这种加密方式加密速度非常快,适合经常发送数据的场合。缺点是密钥的传输比较麻烦。

    • 非对称加密算法

      加密和解密用的密钥是不同的,这种加密方式是用数学上的难解问题构造的,通常加密解密的速度比较慢,适合偶尔发送数据的场合。优点是密钥传输方便。常见的非对称加密算法为RSA、ECC和EIGamal。

    实际中,一般是通过RSA加密AES的密钥,传输到接收方,接收方解密得到AES密钥,然后发送方和接收方用AES密钥来通信。

    本文下面AES原理的介绍参考自《现代密码学教程》,AES的实现在介绍完原理后开始。

    AES的基本结构

    AES为分组密码,分组密码也就是把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。在AES标准规范中,分组长度只能是128位,也就是说,每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。密钥的长度不同,推荐加密轮数也不同,如下表所示:

    AES 密钥长度(32位比特字) 分组长度(32位比特字) 加密轮数
    AES-128 4 4 10
    AES-192 6 4 12
    AES-256 8 4 14

    轮数在下面介绍,这里实现的是AES-128,也就是密钥的长度为128位,加密轮数为10轮。 
    上面说到,AES的加密公式为C = E(K,P),在加密函数E中,会执行一个轮函数,并且执行10次这个轮函数,这个轮函数的前9次执行的操作是一样的,只有第10次有所不同。也就是说,一个明文分组会被加密10轮。AES的核心就是实现一轮中的所有操作。

    AES的处理单位是字节,128位的输入明文分组P和输入密钥K都被分成16个字节,分别记为P = P0 P1 … P15 和 K = K0 K1 … K15。如,明文分组为P = abcdefghijklmnop,其中的字符a对应P0,p对应P15。一般地,明文分组用字节为单位的正方形矩阵描述,称为状态矩阵。在算法的每一轮中,状态矩阵的内容不断发生变化,最后的结果作为密文输出。该矩阵中字节的排列顺序为从上到下、从左至右依次排列,如下图所示: 
    state

    现在假设明文分组P为”abcdefghijklmnop”,则对应上面生成的状态矩阵图如下: 
    state2
    上图中,0x61为字符a的十六进制表示。可以看到,明文经过AES加密后,已经面目全非。

    类似地,128位密钥也是用字节为单位的矩阵表示,矩阵的每一列被称为1个32位比特字。通过密钥编排函数该密钥矩阵被扩展成一个44个字组成的序列W[0],W[1], … ,W[43],该序列的前4个元素W[0],W[1],W[2],W[3]是原始密钥,用于加密运算中的初始密钥加(下面介绍);后面40个字分为10组,每组4个字(128比特)分别用于10轮加密运算中的轮密钥加,如下图所示: 
    keystate
    上图中,设K = “abcdefghijklmnop”,则K0 = a, K15 = p, W[0] = K0 K1 K2 K3 = “abcd”。

    AES的整体结构如下图所示,其中的W[0,3]是指W[0]、W[1]、W[2]和W[3]串联组成的128位密钥。加密的第1轮到第9轮的轮函数一样,包括4个操作:字节代换、行位移、列混合和轮密钥加。最后一轮迭代不执行列混合。另外,在第一轮迭代之前,先将明文和原始密钥进行一次异或加密操作。 
    aes_struct
    上图也展示了AES解密过程,解密过程仍为10轮,每一轮的操作是加密操作的逆操作。由于AES的4个轮操作都是可逆的,因此,解密操作的一轮就是顺序执行逆行移位、逆字节代换、轮密钥加和逆列混合。同加密操作类似,最后一轮不执行逆列混合,在第1轮解密之前,要执行1次密钥加操作。

    下面分别介绍AES中一轮的4个操作阶段,这4分操作阶段使输入位得到充分的混淆。

    一、字节代换

    1.字节代换操作

    AES的字节代换其实就是一个简单的查表操作。AES定义了一个S盒和一个逆S盒。 
    AES的S盒:

    行/列 0 1 2 3 4 5 6 7 8 9 A B C D E F
    0 0x63 0x7c 0x77 0x7b 0xf2 0x6b 0x6f 0xc5 0x30 0x01 0x67 0x2b 0xfe 0xd7 0xab 0x76
    1 0xca 0x82 0xc9 0x7d 0xfa 0x59 0x47 0xf0 0xad 0xd4 0xa2 0xaf 0x9c 0xa4 0x72 0xc0
    2 0xb7 0xfd 0x93 0x26 0x36 0x3f 0xf7 0xcc 0x34 0xa5 0xe5 0xf1 0x71 0xd8 0x31 0x15
    3 0x04 0xc7 0x23 0xc3 0x18 0x96 0x05 0x9a 0x07 0x12 0x80 0xe2 0xeb 0x27 0xb2 0x75
    4 0x09 0x83 0x2c 0x1a 0x1b 0x6e 0x5a 0xa0 0x52 0x3b 0xd6 0xb3 0x29 0xe3 0x2f 0x84
    5 0x53 0xd1 0x00 0xed 0x20 0xfc 0xb1 0x5b 0x6a 0xcb 0xbe 0x39 0x4a 0x4c 0x58 0xcf
    6 0xd0 0xef 0xaa 0xfb 0x43 0x4d 0x33 0x85 0x45 0xf9 0x02 0x7f 0x50 0x3c 0x9f 0xa8
    7 0x51 0xa3 0x40 0x8f 0x92 0x9d 0x38 0xf5 0xbc 0xb6 0xda 0x21 0x10 0xff 0xf3 0xd2
    8 0xcd 0x0c 0x13 0xec 0x5f 0x97 0x44 0x17 0xc4 0xa7 0x7e 0x3d 0x64 0x5d 0x19 0x73
    9 0x60 0x81 0x4f 0xdc 0x22 0x2a 0x90 0x88 0x46 0xee 0xb8 0x14 0xde 0x5e 0x0b 0xdb
    A 0xe0 0x32 0x3a 0x0a 0x49 0x06 0x24 0x5c 0xc2 0xd3 0xac 0x62 0x91 0x95 0xe4 0x79
    B 0xe7 0xc8 0x37 0x6d 0x8d 0xd5 0x4e 0xa9 0x6c 0x56 0xf4 0xea 0x65 0x7a 0xae 0x08
    C 0xba 0x78 0x25 0x2e 0x1c 0xa6 0xb4 0xc6 0xe8 0xdd 0x74 0x1f 0x4b 0xbd 0x8b 0x8a
    D 0x70 0x3e 0xb5 0x66 0x48 0x03 0xf6 0x0e 0x61 0x35 0x57 0xb9 0x86 0xc1 0x1d 0x9e
    E 0xe1 0xf8 0x98 0x11 0x69 0xd9 0x8e 0x94 0x9b 0x1e 0x87 0xe9 0xce 0x55 0x28 0xdf
    F 0x8c 0xa1 0x89 0x0d 0xbf 0xe6 0x42 0x68 0x41 0x99 0x2d 0x0f 0xb0 0x54 0xbb 0x16

    状态矩阵中的元素按照下面的方式映射为一个新的字节:把该字节的高4位作为行值,低4位作为列值,取出S盒或者逆S盒中对应的行的元素作为输出。例如,加密时,输出的字节S1为0x12,则查S盒的第0x01行和0x02列,得到值0xc9,然后替换S1原有的0x12为0xc9。状态矩阵经字节代换后的图如下: 
    (第二个字符0xAB查表后应该是转换成0x62的,感谢细心的朋友指出,有空再重新画图更正了) 
    byte

    2.字节代换逆操作

    逆字节代换也就是查逆S盒来变换,逆S盒如下:

    行/列 0 1 2 3 4 5 6 7 8 9 A B C D E F
    0 0x52 0x09 0x6a 0xd5 0x30 0x36 0xa5 0x38 0xbf 0x40 0xa3 0x9e 0x81 0xf3 0xd7 0xfb
    1 0x7c 0xe3 0x39 0x82 0x9b 0x2f 0xff 0x87 0x34 0x8e 0x43 0x44 0xc4 0xde 0xe9 0xcb
    2 0x54 0x7b 0x94 0x32 0xa6 0xc2 0x23 0x3d 0xee 0x4c 0x95 0x0b 0x42 0xfa 0xc3 0x4e
    3 0x08 0x2e 0xa1 0x66 0x28 0xd9 0x24 0xb2 0x76 0x5b 0xa2 0x49 0x6d 0x8b 0xd1 0x25
    4 0x72 0xf8 0xf6 0x64 0x86 0x68 0x98 0x16 0xd4 0xa4 0x5c 0xcc 0x5d 0x65 0xb6 0x92
    5 0x6c 0x70 0x48 0x50 0xfd 0xed 0xb9 0xda 0x5e 0x15 0x46 0x57 0xa7 0x8d 0x9d 0x84
    6 0x90 0xd8 0xab 0x00 0x8c 0xbc 0xd3 0x0a 0xf7 0xe4 0x58 0x05 0xb8 0xb3 0x45 0x06
    7 0xd0 0x2c 0x1e 0x8f 0xca 0x3f 0x0f 0x02 0xc1 0xaf 0xbd 0x03 0x01 0x13 0x8a 0x6b
    8 0x3a 0x91 0x11 0x41 0x4f 0x67 0xdc 0xea 0x97 0xf2 0xcf 0xce 0xf0 0xb4 0xe6 0x73
    9 0x96 0xac 0x74 0x22 0xe7 0xad 0x35 0x85 0xe2 0xf9 0x37 0xe8 0x1c 0x75 0xdf 0x6e
    A 0x47 0xf1 0x1a 0x71 0x1d 0x29 0xc5 0x89 0x6f 0xb7 0x62 0x0e 0xaa 0x18 0xbe 0x1b
    B 0xfc 0x56 0x3e 0x4b 0xc6 0xd2 0x79 0x20 0x9a 0xdb 0xc0 0xfe 0x78 0xcd 0x5a 0xf4
    C 0x1f 0xdd 0xa8 0x33 0x88 0x07 0xc7 0x31 0xb1 0x12 0x10 0x59 0x27 0x80 0xec 0x5f
    D 0x60 0x51 0x7f 0xa9 0x19 0xb5 0x4a 0x0d 0x2d 0xe5 0x7a 0x9f 0x93 0xc9 0x9c 0xef
    E 0xa0 0xe0 0x3b 0x4d 0xae 0x2a 0xf5 0xb0 0xc8 0xeb 0xbb 0x3c 0x83 0x53 0x99 0x61
    F 0x17 0x2b 0x04 0x7e 0xba 0x77 0xd6 0x26 0xe1 0x69 0x14 0x63 0x55 0x21 0x0c 0x7d

    二、行移位

    1.行移位操作

    行移位是一个简单的左循环移位操作。当密钥长度为128比特时,状态矩阵的第0行左移0字节,第1行左移1字节,第2行左移2字节,第3行左移3字节,如下图所示: 
    shiftRows

    2.行移位的逆变换

    行移位的逆变换是将状态矩阵中的每一行执行相反的移位操作,例如AES-128中,状态矩阵的第0行右移0字节,第1行右移1字节,第2行右移2字节,第3行右移3字节。

    三、列混合

    1.列混合操作

    列混合变换是通过矩阵相乘来实现的,经行移位后的状态矩阵与固定的矩阵相乘,得到混淆后的状态矩阵,如下图的公式所示: 
    col

    状态矩阵中的第j列(0 ≤j≤3)的列混合可以表示为下图所示: 
    col2

    其中,矩阵元素的乘法和加法都是定义在基于GF(2^8)上的二元运算,并不是通常意义上的乘法和加法。这里涉及到一些信息安全上的数学知识,不过不懂这些知识也行。其实这种二元运算的加法等价于两个字节的异或,乘法则复杂一点。对于一个8位的二进制数来说,使用域上的乘法乘以(00000010)等价于左移1位(低位补0)后,再根据情况同(00011011)进行异或运算,设S1 = (a7 a6 a5 a4 a3 a2 a1 a0),刚0x02 * S1如下图所示: 
    col3 
    也就是说,如果a7为1,则进行异或运算,否则不进行。 
    类似地,乘以(00000100)可以拆分成两次乘以(00000010)的运算: 
    col4 
    乘以(0000 0011)可以拆分成先分别乘以(0000 0001)和(0000 0010),再将两个乘积异或: 
    col5
    因此,我们只需要实现乘以2的函数,其他数值的乘法都可以通过组合来实现。 
    下面举个具体的例子,输入的状态矩阵如下:

           
    C9 E5 FD 2B
    7A F2 78 6E
    63 9C 26 67
    B0 A7 82 E5

    下面,进行列混合运算: 
    以第一列的运算为例: 
    col7 
    其它列的计算就不列举了,列混合后生成的新状态矩阵如下:

           
    D4 E7 CD 66
    28 02 E5 BB
    BE C6 D6 BF
    22 0F DF A5

    2.列混合逆运算

    逆向列混合变换可由下图的矩阵乘法定义: 
    col6 
    可以验证,逆变换矩阵同正变换矩阵的乘积恰好为单位矩阵。

    四、轮密钥加

    轮密钥加是将128位轮密钥Ki同状态矩阵中的数据进行逐位异或操作,如下图所示。其中,密钥Ki中每个字W[4i],W[4i+1],W[4i+2],W[4i+3]为32位比特字,包含4个字节,他们的生成算法下面在下面介绍。轮密钥加过程可以看成是字逐位异或的结果,也可以看成字节级别或者位级别的操作。也就是说,可以看成S0 S1 S2 S3 组成的32位字与W[4i]的异或运算。 
    roundadd
    轮密钥加的逆运算同正向的轮密钥加运算完全一致,这是因为异或的逆操作是其自身。轮密钥加非常简单,但却能够影响S数组中的每一位。

    密钥扩展

    AES首先将初始密钥输入到一个4*4的状态矩阵中,如下图所示。 
    keyextends
    这个4*4矩阵的每一列的4个字节组成一个字,矩阵4列的4个字依次命名为W[0]、W[1]、W[2]和W[3],它们构成一个以字为单位的数组W。例如,设密钥K为”abcdefghijklmnop”,则K0 = ‘a’,K1 = ‘b’, K2 = ‘c’,K3 = ‘d’,W[0] = “abcd”。 
    接着,对W数组扩充40个新列,构成总共44列的扩展密钥数组。新列以如下的递归方式产生: 
    1.如果i不是4的倍数,那么第i列由如下等式确定: 
    W[i]=W[i-4]⨁W[i-1] 
    2.如果i是4的倍数,那么第i列由如下等式确定: 
    W[i]=W[i-4]⨁T(W[i-1]) 
    其中,T是一个有点复杂的函数。 
    函数T由3部分组成:字循环、字节代换和轮常量异或,这3部分的作用分别如下。 
    a.字循环:将1个字中的4个字节循环左移1个字节。即将输入字[b0, b1, b2, b3]变换成[b1,b2,b3,b0]。 
    b.字节代换:对字循环的结果使用S盒进行字节代换。 
    c.轮常量异或:将前两步的结果同轮常量Rcon[j]进行异或,其中j表示轮数。 
    轮常量Rcon[j]是一个字,其值见下表。

    j 1 2 3 4 5
    Rcon[j] 01 00 00 00 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00
    j 6 7 8 9 10
    Rcon[j] 20 00 00 00 40 00 00 00 80 00 00 00 1B 00 00 00 36 00 00 00

    下面举个例子: 
    设初始的128位密钥为: 
    3C A1 0B 21 57 F0 19 16 90 2E 13 80 AC C1 07 BD 
    那么4个初始值为: 
    W[0] = 3C A1 0B 21 
    W[1] = 57 F0 19 16 
    W[2] = 90 2E 13 80 
    W[3] = AC C1 07 BD 
    下面求扩展的第1轮的子密钥(W[4],W[5],W[6],W[7])。 
    由于4是4的倍数,所以: 
    W[4] = W[0] ⨁ T(W[3]) 
    T(W[3])的计算步骤如下: 
    1. 循环地将W[3]的元素移位:AC C1 07 BD变成C1 07 BD AC; 
    2. 将 C1 07 BD AC 作为S盒的输入,输出为78 C5 7A 91; 
    3. 将78 C5 7A 91与第一轮轮常量Rcon[1]进行异或运算,将得到79 C5 7A 91,因此,T(W[3])=79 C5 7A 91,故 
    W[4] = 3C A1 0B 21 ⨁ 79 C5 7A 91 = 45 64 71 B0 
    其余的3个子密钥段的计算如下: 
    W[5] = W[1] ⨁ W[4] = 57 F0 19 16 ⨁ 45 64 71 B0 = 12 94 68 A6 
    W[6] = W[2] ⨁ W[5] =90 2E 13 80 ⨁ 12 94 68 A6 = 82 BA 7B 26 
    W[7] = W[3] ⨁ W[6] = AC C1 07 BD ⨁ 82 BA 7B 26 = 2E 7B 7C 9B 
    所以,第一轮的密钥为 45 64 71 B0 12 94 68 A6 82 BA 7B 26 2E 7B 7C 9B。

    AES解密

    在文章开始的图中,有AES解密的流程图,可以对应那个流程图来进行解密。下面介绍的是另一种等价的解密模式,流程图如下图所示。这种等价的解密模式使得解密过程各个变换的使用顺序同加密过程的顺序一致,只是用逆变换取代原来的变换。 
    deaes

    AES原理到这里就结束了。实际开发中都是直接使用第三方已经封装好的库,这时候就需要根据使用的编程语言直接加载第三方库,来实现。所以省去了原文的C的代码实现部分,愿意深度了解代码实现的请移步到文章开头标明的原文出处。

    个人博客里面也有如何用 Java、JavaScript(含两者的跨语言加密解密) 去实现的文章,感兴趣的可以在我的个人博客里面找一下。

    其他加密算法相关参考:

    RSA 加密算法原理简述:https://blog.csdn.net/gulang03/article/details/81176133

    Java 实现 AES 和 RSA 算法:https://blog.csdn.net/gulang03/article/details/81771341

    JS 与 JAVA 跨语言实现 RSA 和 AES 加密算法:https://blog.csdn.net/gulang03/article/details/82230408

    展开全文
  • RSA加密与解密(Java实现)

    万次阅读 多人点赞 2018-10-17 10:22:52
    RSA是一种非对称加密算法。现在,很多登陆表单的密码的都采用RSA加密,例如京东中的登陆使用公钥对密码进行加密。 Base64编码 apache.commons-codex包提供了许多编码格式转换,例如Base64。 以下为Base64编码表...
  • python密码加密

    万次阅读 2018-11-06 11:24:01
    推荐2种:sha1和md5,不可逆,sha1生成后40位,相对安全,但速度慢,md5生成后32位,速度快.加密后特点:数字加小写英文字母,简单密码容易破解...生成md5 32位加密串 """ import hashlib str1 = 'hello world!' ret = hash...
  • Java加密技术(四)——非对称加密算法RSA 非对称加密算法——RSA 基本概念 非对称加密算法是一种密钥的保密方法。 非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有...
  • phpen_php加密_sg11加密_xend混淆加密-PHPEN加密 php在线加密平台 PHP代码加密工具 Xend - 专注于PHP加密与PHP代码保护 Xend加密、Xend加密工具、phpxend加密 PHPXEND加密已实现在线加密 更有多种混淆加密集解密...
  • 加密种类: 1. 不可逆加密:【Hash加密算法/散列算法/摘要算法】 一旦加密就不能反向解密得到密码原文,一般用来加密用户密码,app的服务器端数据库里一般存储的也都是加密后的用户密码。 在数据传输的过程中,首先把...
  • 对称加密和非对称加密的区别

    万次阅读 多人点赞 2018-08-13 17:53:37
    对称加密算法: 密钥较短,破译困难,除了数据加密标准(DES),另一个对称密钥加密系统是国际数据加密算法(IDEA),它比DES的加密性好,且对计算机性能要求也没有那么高. 优点: 算法公开、计算量小...
  • RSA加密的原理——为什么被公钥加密的可以被私钥解密? 目录 一,RSA 数学理论基础 二,RSA实现原理 三,RSA加密的过程 四,参考文献 引言 在密码学最开始,都是使用的普通加密模式 A 用加密...
  • 同态加密

    万次阅读 2019-05-15 09:19:42
    对经过同态加密的数据进行处理得到一个输出,将这一输出进行解密,其结果与用同一方法处理未加密的原始数据得到的输出结果是一样的。 1.同态加密的相关概念 同态加密是一种无须对加密数据进行提前解密就可以执行...
  • Sqlite数据库加密加密

    千次阅读 2019-05-10 15:06:38
    Sqlite数据库加密。(C#连接加密的Sqlite数据库的方法) 参考地址[1]: https://www.jb51.net/article/120279.htm sqlite破解安装包下载: https://download.csdn.net/download/yinchoushi8780/11170781 一、数据库...
  • 课程内容包含乱码的原因分析、代码的压缩与优化、JavaScript/html前端代码加密解密、前端加密防360浏览器拦截、html代码解密原理分析、万能解密神器、手动解密html代码等等。
  • Shiro密码加密 盐值加密

    千次阅读 2020-05-20 11:15:20
    1.为什么要盐值加密 对于同一密码,同一加密算法会产生相同的hash值。这样,当用户进行身份验证时,对用户输入的明文密码应用相同的hash加密算法,得出一个hash值,然后使用该hash值和之前存储好的密文值进行对照,...
  • C# 3Des加密解密

    万次阅读 2019-05-09 10:32:19
    第三方的加密规则约定:加密经过3DES加密后的Base64 编码 最近在对接一个第三方接口,请求参数和响应参数全采用3des加密规则,由于我是用.NET对接的,而第三方是Java开发的,所以两种程序之间采用的算法有一点差异...
  • 对称加密、单向加密和非对称加密

    千次阅读 2018-06-02 23:40:41
    下文主要从加密算法的特征、常用加密算法和加密工具等方面,梳理和比较对称加密、单向加密和公钥加密的概念及其之间的联系。 1. 对称加密 采用单钥密码的加密方法,同一个密钥可以同时用来加密和解密,这种加密...
  • 华为手机如何添加门禁卡(加密

    万次阅读 多人点赞 2019-10-25 15:34:09
    华为手机如何添加“加密门禁卡” 1、前期准备 (1)支持NFC手机一部 本人使用的是华为P20pro (2)PN532套装 这个淘宝上搜,很好买到的。 (3)空白卡(UIC)+加密门禁卡 (4)相关软件 1.M1卡分析助手 v2.6 添加...
  • 对称加密与非对称加密

    千次阅读 2020-09-23 14:55:16
    (一)对称加密(Symmetric Cryptography) 对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。对称加密有很多种算法,由于它效率很高,所以被广泛...
  • python3实现AES加密

    万次阅读 多人点赞 2019-04-16 18:59:06
    这几天研究了一下 python 实现 AES 加密,有很多坑 AES 加密的参数及其条件 这个 AES 加密的主要坑就在于这些条件, 首先 aes 加密有一下几个参数 秘钥:加密的时候用秘钥,解密的时候需要同样的秘钥才能解出来 ...
  • 如何使用加密狗加密自己程序

    万次阅读 2019-06-10 16:09:34
    使用加密狗进行程序的加密保护是非常成熟的加密方案。目前市面上比较常见的加密锁:深思的精锐5,威步,safenet。国内比较老牌的加密锁公司是深思,深思的锁从精锐4,到现在的精锐5,都是比较不错的产品,加密安全性...
  • des加密算法(js+java)加密与解密结果相同

    千次下载 热门讨论 2014-01-17 14:08:25
    des加密算法(js+java)加密与解密结果相同 包含三个文件 : des.js des.html ,用于实现前端脚本的加密与解密 des.java 用于后台的加密解密操作; 项目中正好用到,已经过验证,两个加密解密结果相同,分享给...
  • springboot对数据库密码加密

    万次阅读 热门讨论 2018-08-31 16:39:17
    开发的同学们都知道,例如项目依赖的信息,数据库信息一般是保存在配置文件中,而且都是明文,因此需要进行加密处理,今天在这里介绍下jasypt集成springboot加密的配置。 首先,这些都是建立在你的springboot项目是...
  • 对称加密&非对称加密&混合加密

    千次阅读 2018-11-09 10:23:13
    对称加密&amp;amp;amp;amp;amp;amp;amp;非对称加密&amp;amp;amp;amp;amp;amp;amp;混合加密写于前iOS中常在哪些场景应用到写一个系列本文概要对称加密(Symmetric Cryptography)非对称加密(ASymmetric ...
  • RSA加密和DH加密

    千次阅读 2019-05-29 17:36:02
    对称加密:双方使用同一种加密规则对信息加密、解密(加解密速度快、效率高,适合大量数据,常见的有DES、AES、RC5、Blowfish、IDEA)。 非对称加密:乙方生成公钥、私钥这2把密钥。公钥公开,任何人都可以获取。...
  • 文件加密软件

    万次阅读 2019-04-16 16:21:34
    在电商年代,互联网给大家的衣食住行、工作造成巨大便捷,随之各种各样电子设备的呈现,客户也开始运用文件加密软件来保障自己的数据。现阶段市场上的免费加密软件诸多,客户都是犹豫不决文件加密软件哪家好用这个...
  • 对称加密和非对称加密

    千次阅读 2019-06-15 20:36:31
    对称加密 什么是对称加密? 对称加密就是指,加密和解密使用同一个密钥的加密方式。 对称加密的工作过程 发送方使用密钥将明文数据加密成密文,然后发送出去,接收方收到密文后,使用同一个密钥将密文解密成明文...
  • 普通加密Shiro普通加密(md5)实现1.1 编写MD5加密工具类MD5Utils1.2 测试MD5算法1.3 在applicationContext-shiro.xml添加凭证匹配器(使用默认匹配器)2. 加盐加密2.1 测试加盐加密(添加一个特殊的字符串)2.2 配置...
  • Java.Utils:AES-128-CBC 加密方式

    万次阅读 2020-02-13 18:18:50
    package ... import org.apache.commons.codec.binary.Base64; import org.bouncycastle.jce.provider.BouncyCastleProvider; import javax.crypto.BadPaddingException; import javax.crypto....
  • 单向加密和双向加密

    千次阅读 2017-12-18 15:15:27
    单向加密又称为不可逆加密,即生成密文无法反解的一种加密方式; 双向加密又称为可逆加密,即生成密文后,在需要的时候可以反解为明文; 实现 单向加密实现基本上围绕MD5和SHA系列; SHA 双向加密实现RSA、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 262,335
精华内容 104,934
关键字:

加密