zoukankan      html  css  js  c++  java
  • 整理密码学的系统性地基础知识(图解、密码原理、常用算法、openssl)

    1.   密码原理基础

    1.1.   对称密码

    说明:对称密码主要就是依据下面的”异或”运算实现加解密的,这里可以把数A假定为明文,数B假定为KEY,数C假定为密文。通过下面简单的异或运算,即可实现用同样的KEY将明文转换为密文,并将密文转换成明文了。另外也可以理解到实际使用时为什么要将对称密码算法和分组模式结合才能使用,因为多数对称密码(即分组类型的对称密码)能加密的明文长度是固定的,所以需要对明文进行分组迭代。

    数A  XOR  数B = 数C

    数C  XOR  数B = 数A

    1.2.   公钥密码(RSA)

    1.2.1.    RSA的加密解密

    1.2.2.    RSA中密钥对的生成

    (1)   求数N

    用伪随机数生成器求pqpq都是质数

    N = p * q

    (2)   求数L

    L = lcm(p-1, q-1);  lcm为求最小公倍数的函数

    (3)   求数E

    1 < E < L;

    gcd(E, L) = 1;  gcd为求最大公约数的函数

    (4)   求数D

    1 < D < L;

    E X D  mod L = 1;

     

    1.2.3.    实践

    Step1: 生成密钥对

    (1)   N

    准备两个质数,如p=17; q=19; N = p * q = 17 * 19 = 323;

    (2)   L

    L = lcm(p-1, q-1) = lcm(17-1, 19-1) = lcm(16, 18) = 144;

    (3)   E

    gcd(E, L) = 1;

    满足条件的E有很低,如5,7,11,13,17,19,23,25,29,31,…

    选择5作为E

    (4)   D

    E X D  mod L = 1

    D29可以满足上面的公式,因为E X D  mod L = 5 X 29 mod 144 = 145 mod 144 = 1;

    到这里我们已经生成了密钥对,即:

    公钥: E=5, N=323;

    私钥: D=29, N=323;

    Step2:

    要加密的明文必须是小于N的数,即小于323。假设要加密的明文为123 

    加密:明文E mod N = 1235 mod 323; 所以密文就是225

    解密: 密文D mod N = 22529 mod 323 = 123;

     

    2.   常见算法归类

    对称密码

    公钥密码

    数字签名

    aes128,aes192,aes256

    rsa

    rsa

    des,des-ede, des-ede3,3des,desx,

    ElGamal

    dsa

    rijindael,rijindael128,rijindael192,rijindael256

    Rabin

    ElGamal

    arcfour,arcfour128,arcfour256(流密码)

    ECC(椭圆曲线密码)

    Rabin

    blowfish

     

     

    cast128

     

     

    chacha20-poly1305(流密码,既可加密也可认证)

     

     

    chacha20(流密码)

     

     

    单向散列函数

    消息认证码

    密钥交换

    md4,md5

    hmac-sha-1

    diffie-hellman

    sha,sha1,sha224,sha256,sha384,sha512

    hmac-md5

    rsa

    whirlpool

    hmac-ripemd

     

    ripemd,ripemd-160

    poly1305

     

  • 相关阅读:
    echo 变量不加引号出错
    linux以16进制方式查看文件
    批量删除符合条件的文件
    sed删除行
    linux用户环境变量
    脚本路径问题_dirname
    shell脚本返回字符串
    关于Unix时间戳
    grunt用来压缩前端脚本
    JAVA ThreadPoolExecutor(转)
  • 原文地址:https://www.cnblogs.com/aimmiao/p/13187282.html
Copyright © 2011-2022 走看看