zoukankan      html  css  js  c++  java
  • 加密方式

    1. Hash加密

    对明文进行Hash加密,得到密文,但是密文不能解密为明文。
    例如:Md5 sha1等

    2. 对称加密

    使用密钥,对明文进行加密,得到密文
    使用密钥,对密文进行解密,得到明文
    例如 AES

    3. 非对称加密

    有密钥和公钥。
    公钥是所有人都可以看到的。
    密钥只有自己拥有。
    使用公钥,对明文进行加密,得到密文。
    使用密钥,对密文进行解密,得到明文。

    例如RSA

    4.RSA算法

    1.生成公钥和密钥

    1. 安装openssl

      yum install openssl

    2. 生成私钥

    openssl genrsa -out private.pem 1024
    
    • genrsa 表示使用rsa算法
    • -out 表示输出到文件
    • 1024 表示私钥的长度
    1. 生成公钥

      openssl rsa -in private.pem -pubout -out public.pem

    • private.pem 是私钥的文件地址

    2. 加密和解密

    1.公钥加密,私钥解密

    from M2Crypto import RSA
    msg = 'aaaa-aaaa'
    rsa_pub = RSA.load_pub_key('public.pem')
    rsa_pri = RSA.load_key('private.pem')
    
    print '公钥加密'
    en_msg=rsa_pub.public_encrypt(msg,RSA.pkcs1_padding)
    en_msg64=en_msg.encode('base64')
    print '密文base64',en_msg64
    print '私钥解密'
    de_msg=rsa_pri.private_decrypt(en_msg,RSA.pkcs1_padding)
    print '明文',de_msg
    
    

    这个用于加密传输的数据。例如A用公钥加密信息,传送给B,只要B有私钥,才能解密。

    2.私钥加密,公钥解密

    print '###################################'
    print '私钥加密'
    en_msg=rsa_pri.private_encrypt(msg, RSA.pkcs1_padding)
    en_msg64=en_msg.encode('base64')
    print '密文base64',en_msg64
    
    print '公钥解密'
    de_msg=rsa_pub.public_decrypt(en_msg,RSA.pkcs1_padding)
    print '明文',de_msg
    

    这个用于生成数字签名。也就是证明数据是私钥拥有者发送的,而且未被修改。
    例如

    • B对发送给A的数据DATA,进行hash加密,得到HASH,
    • B使用私钥对HASH加密,得到EN_HASH(这个就是数字签名),
    • B发送DATA和EN_HASH给A
    • A使用公钥解密EN_HASH,如果成功,表示这个数据是B发送的,否则就不是
    • A对DATA进行hash加密,得到HASH1,如果HASH1和HASH相同,表示DATA没有被修改,否则就是修改了。

    由于所有人都有公钥,所有人都能解密,所以如果这个方法不能用来加密数据。

    RSA算法

    未经允许,请不要转发

  • 相关阅读:
    MySQL Backup mysqldump 常用选项与主要用法--转发
    openssl 之RSA加密
    Windows 之Dll/lib导出
    缓存雪崩、击穿、穿透
    时间复杂度
    分布式事务
    mysql主从复制与读写分离
    什么是消息队列?
    微服务架构演化
    高并发问题常规思路
  • 原文地址:https://www.cnblogs.com/Xjng/p/11530927.html
Copyright © 2011-2022 走看看