浅谈密码学

解密解密算法的分类

一、对称加密

    单密码系统的加密方法中,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。密钥是控制加密及解密过程的指令。对称加密过程中,数据发送方将明文(原始数据)和加密秘钥一起经过特殊的算法处理后,使其变成复杂的加密密文发送出去。接收方收到密文后,若想解读原文,则需要使用加密密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一,发收信双方都使用这个密钥对数据进行加密和解密。

    对称加密算法的优点是:

            (1)、密钥公开

            (2)、计算量小

            (3)、加密速度快

            (4)、加密效率高

    缺点:密钥管理不方便

二、非对称加密

      1、非对称加密算法需要两个密钥来进行加密和解密,这两个密钥都是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。

       2、如果使用共有密钥进行加密,只有私有密钥才能进行解密;如果私钥对数据进行加密,那么只有对应的公钥才能进行解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫非对称加密算法。

        例如:A,B 用非对称加密通信:

                    (1)、A 生成一对密钥(公钥和私钥)并将公钥向其他方向公开,私钥肚子严格保密。

                    (2)、得到该公钥的 B 使用该密钥对机密信息进行加密后在发送给 A 方。

                    (3)、A方再用自己保存的专用密钥(私钥)对加密后的信息进行解密。A 方只能用其专用密钥(私钥)解密由对应的公钥加密后的信息。在传输过程中,即使攻击者截获了传输的密文,并得到了 A 的公钥,也无法破解密文,应为只有 A 的私钥才能才能解密密文。

                    (4)、同样,如果 A 要回复加密信息给 B,那么需要B先公布B的公钥给A用于加密,B 自己保存 B 的私钥用于解密。

           3、优点:密码管理的安全性好;

            4、缺点:加密和解密花费时间长、速度慢,只适合少量数据进行加密。        

三、散列算法

    散列(Hash)函数对不同长度的输入消息,产生固定长度(比如 MD5 是16字节(128位))的输出。这个固定长度的暑促胡通常称为原输入消息的“散列”或“消息摘要”(Message digest)。一个安全的哈希函数 H 必须具有以下属性:

    (1)、H 能够应用到大小不一的数据上。

  (2)、H 能够生成大小固定的输出。

  (3)、对于任意给定的 x,H(x) 的计算相对简单。

  (4)、对于任意给定的代码 h,要发现满足 H(x) = h 的 x 在计算上时不可行的。

  (5)、对于任意给定的块 x ,要发现满足 H(y) = H(x) 而 y = x 在计算上是不可行的。

  (6)、要发现满足 H(X) = H(y),的(X,y)对在计算上是不可行的。

    应用场景:

                错误矫正,文件校验(奇偶校验,CRC,无妨篡改功能),数字签名等。

四、对称加密算法分类

        1、XOR 加密

                异或性质:A^0 == A,A^A == 0

                A  为明文,B 为密文

                加密:B = A ^key

                解密:A = B ^key

                C 语言实例代码:   

#include<stdio.h>
#include<string.h>

// XOR 加密算法:

void secert(char *data,int len,char *key,int keylen)
{
    int i;
    for( i=0;i<len;i++ )
    {
        data[i] = data[i] ^ key[i%keylen];
    }
}

int main(void)
{
    char str[] = "Hello Crptology!";
    int len = strlen(str);

    char key[] = "12345678abcdef";
    int keylen = strlen(key);
    
    printf("加密前的数据为:%s\n",str);
    secert(str,len,key,keylen);

    printf("加密后的数据为:%s\n",str);

    secert(str,len,key,keylen);

    printf("解密后的数据为:%s\n",str);
    return 0;
}
                sercert() 函数既为加密函数,也是解密函数。同时也证明了 XOR 算法为对称加密算法。

        2、DES、3DES加密

                DES 全称为 Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法。DES 算法的入口参数有三个:Key、Data、Mode。其中 Key 为 7个字节,共 56 位,是 DES算法的工作密钥;Data为 8 个字节64 位,是要加密或被解密的数据;Mode 为 DES 的工作方式,有两种:加密或者解密。

                3DES(即 Triple DES) 是 DES 向 AES 过渡的加密算法,它使用 3 条56位的密钥对数据进行三次加密。是 DES 的一个更为安全的变形。它以 DES 为基本模块,通过组合分组方法设计出分组加密算法。比起最初的 DES,3DES更为安全。

        3、AES Advanced Encryption Standard

                AES 高级加密标准(Advanced Encryption Standard,缩写 AES),是美国联邦政府采用的一种区块机密标准。这个标准代替原先的 DES ,已经被多方分析且广为全世界所使用,成为对称加密密钥中最流行的的算法之一。

                AES 加密数据块分组必须为 128比特(16字节),密钥长度可以是 128 比特,192比特,256比特中任意一个(如果数据块及密码长度不足时,会自动补齐)。

        4、Blowfish

        5、twotfish

五、非对称加密算法

        1、RSA 算法密钥的计算获取过程 

                 (1)、密钥的计算过程为:首先选择两个质数p和q,令n=p*q。

                                                        令k=ϕ(n)=(p−1)(q−1),原理见4的分析

                                                        选择任意整数d,保证其与k互质

                                                        取整数e,使得[de]k=[1]k。也就是说de=kt+1,t为某一整数。

        

                   (2)、RSA加密算法原理解析

                            下面分析其内在的数学原理,说到RSA加密算法就不得不说到欧拉定理。

欧拉定理(Euler’s theorem)是欧拉在证明费马小定理的过程中,发现的一个适用性更广的定理。
            首先定义一个函数,叫做欧拉Phi函数,即ϕ(n),其中,n是一个正整数。
             ϕ(n)=总数(从1到n−1,与n互质整数)
              比如5,那么1,2,3,4,都与5互质。与5互质的数有4个。ϕ(5)=4
              再比如6,与1,5互质,与2,3,4并不互质。因此,ϕ(6)=2
               对于一个质数p来说,它和1, 2, 3, …, p – 1都互质,所以ϕ(p)=p−1。比如ϕ(7)=6,ϕ(11)=10

欧拉定理叙述如下:
欧拉定理:如果n是一个正整数,a是任意一个非0整数,且n和a互质。那么,a^ϕ(n)−1可以被n整除。

推论1:如果m和n是互质的正整数。那么,ϕ(mn)=ϕ(m)ϕ(n)

推论2:[ab]n=[[a]n[b]n]n 

证明:假设a和b除以n的余数为c1,c2。a和b可以写成a=nt1+c1,b=nt2+c2。那么,ab=n2t1t2+nt1c2+nt2c1+c1c2。因此ab除以n的余数为c1c2。即[ab]n=[a]n[b]n。

有以上定理后,由此可以推导出RSA算法的内在原理

根据欧拉定理,对于任意z,如果z与n互质,那么:
[z^ϕ(n)]n=[z^k]n=[1]n

因此,
[z^(de)]n=[z^(kt+1)]n=[z^(kt)*z]n=[z^kt]n*[z]n= [z]n   因为[z^k]n = [1]n
上面主要使用了de=kt+1以及推论2。也就是说:
[z^(de)]n=[z]n

根据2的推论,有
([z^e]n)^d=[z]n

即d个余数相乘,因为其乘积可能大于n,所以由[ab]n=[[a]n[b]n]n,例如令a和b都为5,n为3,可知该结论

故上式可描述为[([z^e]n)^d]n=[z]n=z,就是原数字乘方求余数,然后再乘方求余数后得到原来数字的过程,得证。

 

公开的加密方式,私有的解密方式。RSA安全的关键在于很难对一个大的整数进行因子分解。

        (3)、RSA加密算法的使用过程

同样以一个字符串来进行举例,例如要对字符串the art of programming进行加密,RSA算法会提供两个公钥e和n,其值为两个正整数,解密方持有一个私钥d,然后开始加密解密过程过程。

1.      首先根据一定的规整将字符串转换为正整数z,例如对应为0到36,转化后形成了一个整数序列。

2.      对于每个字符对应的正整数映射值z,计算其加密值M=(N^e)%n. 其中N^e表示N的e次方。

3.      解密方收到密文后开始解密,计算解密后的值为(M^d)%n,可在此得到正整数z。

4.      根据开始设定的公共转化规则,即可将z转化为对应的字符,获得明文。

           (4)、RSA加密的缺点

1)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。
2)安全性,RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价,而且密码学界多数人士倾向于因子分解不是NP问题。

3)速度太慢,由于RSA 的分组长度太大,为保证安全性,n 至少也要 600 bitx以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。     

        2、Elgamal 算法

        3、背包算法

        4、Rabin 算法

        5、D-H算法

        6、ECC(椭圆曲线加密算法)

六、散列哈希算法

        1、MD5 Message-Digest Algorithm 5

                MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3MD4

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值