zoukankan      html  css  js  c++  java
  • 非对称加密RSA算法

    密码与加密

    传统密码:
    加密算法是秘密的
    现代密码系统:加密算法是公开的;秘钥是秘密的(秘钥是用来加密的)
    对称加密:加密和解密使用一个秘钥
    非对称加密:使用两个秘钥,一个用来加密,一个用来解密

    加密的RSA是用来进行信息传输用,存数据库的密码用的hash映射,md5或者sha

    非对称加密

    使用两个秘钥,公钥和私钥,公钥加密私钥解密,或者私钥加密公钥解密。
    例如RSA加密算法,应用:https协议,Linux远程登录不用密码。
    公钥:用来加密,是公开的
    私钥:用来解密,是私有的

     加密过程测试:

    1.随机选取两个质数p和q
    2.计算n=pq
    3.选取一个与φ(n)互质的小奇数e, φ(n)=(p-1)(q-1)
    4.对模φ(n), 计算e的乘法逆元d,即满足(e*d) % φ(n) = 1
    5.公钥(e, n) 私钥(d, n)
    6.加密过程:c=(m^e) % n
    7.解密过程:m=(c^d) % n
    p = 53
    q = 59
    n = p*q
    fai_n = (p-1)*(q-1)
    # 选个小奇数 e 要满足(e*d) % fai_n = 1
    e = 3
    # 这个d一定是唯一的,证明略,满足(e*d) % fai_n = 1
    d = 2011
    
    m = 87
    print('信息:', m)
    print('---------公钥加密,私钥解密-------')
    c = (m**e) % n
    print('公钥加密后:', c)
    m = (c**d) % n
    print('私钥解密后:', m)
    print('---------私钥加密,公钥解密-------')
    k = (m**d) % n
    print('私钥加密后:', k)
    print('公钥解密后:', (k**e) % n)
    
    '''
    信息: 87
    ---------公钥加密,私钥解密-------
    公钥加密后: 1833
    私钥解密后: 87
    ---------私钥加密,公钥解密-------
    私钥加密后: 1320
    公钥解密后: 87
    '''

    思考:为什么RSA加密算法破解不了?
    已知公钥(e, n) 求私钥(d, n),需要把n拆成两个质数的乘积
    把一个大整数拆成两个质数只能用穷举法,整数越大破解花费时间越长,
    而且秘钥更换就又需要破解,这样失去破解的意义

  • 相关阅读:
    如何编写自己的Linux安全检查脚本?
    ubuntu桌面版打开终端Terminal的几种方法
    Docker 学习笔记(CentOS 7.1)
    发送验证码倒计时
    在Thinkphp中使用AJAX实现无刷新分页
    php加密解密
    浏览器用户用滤镜实现网页的翻转效果
    PHP定时执行任务的实现
    PHP GBK UTF8互转
    在php4下可用,简单的php数组转成json格式,
  • 原文地址:https://www.cnblogs.com/staff/p/11489857.html
Copyright © 2011-2022 走看看