Python常见的几种数据加密方式

目录
  • md5加密
    • 解密
    • 增加破解成本的方法
    • SHA1安全哈希算法
  • Base64伪加密
  • DES/AES
    • AES和DES的区别
    • 破解方法
  • RSA
    • 非对称加密算法
    • 使用流程和场景介绍
    • 公钥私钥生成方式

前言:

常见的加密算法基本分为这几类:

  • 线性散列算法(签名算法)MD5,sha1
  • 对称性加密算法 AES DES
  • 非对称性加密算法 RSA

md5加密

MD5是一种被广泛使用的线性散列算法,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整的一致性。且MD5加密之后产生的是一个固定长度(32位或16位)的数据。

解密

常规讲MD5是不存在解密的。但是理论上MD5是可以进行反向暴力破解的。暴力破解的大致原理就是用很多不同的数据进行加密后跟已有的加密数据进行对比,由此来寻找规律。理论上只要数据量足够庞大MD5是可以被破解的。但是要注意,破解MD5是需要考虑破解的成本(时间和机器性能)。假设破解当前的MD5密码需要目前计算能力最优秀的计算机工作100年才能破解完成。那么当前的MD5密码就是安全的。

增加破解成本的方法

使用一段无意义且随机的私匙进行MD5加密会生成一个加密串,我们暂且称之为串1
将要加密的的数据跟串1拼接,再进行一次MD5,这时会生成串2
将串2再次进行MD5加密,这时生成的串3就是我们加密后的数据。

我们在注册账号时的密码一般都是用的MD5加密:

import hashlibh = hashlib.md5()
str = 'boboadmin'
h.update(str.encode())
msg = h.hexdigest()
print(msg)

SHA1安全哈希算法

SHA1比MD5的安全性更强,但也比MD5慢

import hashlib
sha1 = hashlib.sha1()
data = '2333333'
sha1.update(data.encode('utf-8'))
sha1_data = sha1.hexdigest()
print(sha1_data)

Base64伪加密

Base64是一种用64个字符来表示任意二进制数据的方法。base64是一种编码方式而不是加密算法。只是看上去像是加密而已。
Base64使用A–Z,a–z,0–9,+,/ 这64个字符实现对数据进行加密。

import base64
str='admin'
str=str.encode('utf-8')
#加密
bs64=base64.b64encode(str)
print(bs64)
#解密
debs64=base64.b64decode(bs64)
print(debs64.decode())

DES/AES

DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的算法。该加密算法是一种对称加密方式,其加密运算、解密运算需要使用的是同样的密钥(一组字符串)即可。

注意:

现在用AES这个标准来替代原先的DES。

AES和DES的区别

加密后密文长度的不同:

  • DES加密后密文长度是8的整数倍
  • AES加密后密文长度是16的整数倍

应用场景的不同:

  • 企业级开发使用DES足够安全
  • 如果要求高使用AES
  • 使用DES/AES进行数据交互时要求双方都拥有相同的私匙

破解方法

  • 暴力破解
  • DES如果使用 56 位的密钥,则可能的密钥数量是 2 的 56 次方个。只要计算足够强大是可以被破解的
#需要下载安装pyDes模块
import binascii
from pyDes import des, CBC, PAD_PKCS5

def des_encrypt(secret_key,s):
    iv = secret_key
    k = des(secret_key,CBC,iv,pad=None,padmode=PAD_PKCS5)
    en = k.encrypt(s,padmode=PAD_PKCS5)
    return binascii.b2a_hex(en)

def des_decrypt(secret_key, s):
    iv = secret_key
    k = des(secret_key,CBC,iv,pad = None,padmode = PAD_PKCS5)
    de = k.decrypt(binascii.a2b_hex(s),padmode = PAD_PKCS5)
    return desecret_str = des_encrypt('12345678', 'I love YOU~')
print(secret_str)
clear_str = des_decrypt('12345678', secret_str)
print(clear_str)

RSA

RSA加密:

RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。

非对称加密算法

非对称加密算法需要两个密钥:

  • 公开密钥(publickey:简称公钥)
  • 私有密钥(privatekey:简称私钥)
  • 公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

注意:

  • 使用时都是使用公匙加密使用私匙解密。公匙可以公开,私匙自己保留。
  • 算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。

使用流程和场景介绍

  • 通过公匙加密,使用私匙解密。私匙是通过公匙计算生成的。假设ABC三方之间相互要进行加密通信。大家相互之间使用公匙进行信息加密,信息读取时使用各自对应的私匙进行信息解密
  • 用户输入的支付密码会通过RSA加密

公钥私钥生成方式

公私匙可以在线生成:

[http://web.chacuo.net/netrsakeypair]

import rsa

def rsaEncrypt(str):
    (pubkey,privkey)=rsa.newkeys(512)
    print("pub:",pubkey)
    print("priv:",privkey)

    content =str.encode('utf-8')

    crypto=rsa.encrypt(content,pubkey)
    return (crypto,privkey)

def rsaDecrypt(str,pk):
    content = rsa.decrypt(str,pk)
    con=content.decode('utf-8')
    return con

(deData,privKey)=rsaEncrypt("hello")
print('加密后的密文',deData)
content = rsaDecrypt(deData,privKey)
print(content)

到此这篇关于Python常见的几种数据加密方式的文章就介绍到这了,更多相关Python 数据加密内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 如何基于python3和Vue实现AES数据加密

    高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的).对称加密算法也就是加密和解密用相同的密钥,具有以下几个特点: 1.最常用的对称加密算法 2.密钥建立时间短.灵敏性好.内存需求低 3.实际使用中,使用工作模式为CTR(最好用BC去实现),此工作模式需要引入IV参数(16位的字节数组) 4.密钥长度128/192/256,其中192与256需要配置无政策限制权限文件(JDK6) 5.填充模式最常用的两种

  • python rsa实现数据加密和解密、签名加密和验签功能

    本篇文章主要说明python库rsa生成密钥对,数据的加密解密,api接口的签名和验签,如有抄袭,请留言联系我. 先安装 pip install rsa 安装好后,请看代码 """ 注意: api签名时:签名用私钥,验签用公钥 数据加密时:加密用公钥,解密用私钥 密钥和公钥保存的图片会在下边展示出来 """ import rsa # 对api的签名机制进行验证:签名用私钥,验签用公钥 class RsaEncrypt: def __init__(

  • python 数据加密代码

    1.hashlib import hashlib #创建一个哈希对象 md = hashlib.md5() #md = hashlib.sha1() #md = hashlib.sha224() #md = hashlib.sha25() #md = hashlib.sha384() #md = hashlib.sha512() 1.1 hashlib.update(arg) 1.2 hashlib.digest() #返回数字形式的哈希 1.3 hashlib.hexdigest() #返回1

  • Python常见的几种数据加密方式

    目录 md5加密 解密 增加破解成本的方法 SHA1安全哈希算法 Base64伪加密 DES/AES AES和DES的区别 破解方法 RSA 非对称加密算法 使用流程和场景介绍 公钥私钥生成方式 前言: 常见的加密算法基本分为这几类: 线性散列算法(签名算法)MD5,sha1 对称性加密算法 AES DES 非对称性加密算法 RSA md5加密 MD5是一种被广泛使用的线性散列算法,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整的一致性.且MD5加密之后

  • PHP常见的几种攻击方式实例小结

    本文实例总结了PHP常见的几种攻击方式.分享给大家供大家参考,具体如下: 1.SQL Injection(sql注入) ①.暴字段长度 Order by num/* ②.匹配字段 and 1=1 union select 1,2,3,4,5--.n/* ③.暴露字段位置 and 1=2 union select 1,2,3,4,5-..n/* ④.利用内置函数暴数据库信息 version() database() user() 不用猜解可用字段暴数据库信息(有些网站不适用): and 1=2 u

  • Python 脚本的三种执行方式小结

    1.交互模式下执行 Python,这种模式下,无需创建脚本文件,直接在 Python解释器的交互模式下编写对应的 Python 语句即可. 1)打开交互模式的方式: Windows下: 在开始菜单找到"命令提示符",打开,就进入到命令行模式: 在命令行模式输入: python 即可进入 Python 的交互模式 Linux 下: 直接在终端输入 python,如果是按装了 python3 ,则根据自己建的软连接的名字进入对应版本的 Python 交互环境,例如我建立软连接使用的 pyt

  • Python字典 dict几种遍历方式

    目录 1.使用 for key in dict遍历字典 2.使用for key in dict.keys () 遍历字典的键 3.使用 for values in dict.values () 遍历字典的值 4.使用 for item in dict.items () 遍历字典的键值对 5.使用 for key,value in dict.items () 遍历字典的键值对 1.使用 for key in dict遍历字典 可以使用for key in dict遍历字典中所有的键 x = {'a

  • js中常见的4种创建对象方式与优缺点

    目录 前言 1.工厂模式 2.构造函数模式 3.原型模式 4.Object.create() 其他模式 总结 前言 说起创建对象,最容易想到的便是通过对象字面量方式直接定义一个对象吧,但这种方式只能创建少量,单独且相互间无联系的对象.若要批量创建对象,该如何? 1.工厂模式 实现: function fn(a,b){ let obj = new Object() obj.a=a obj.b=b return obj } const test = fn(1,2) 优点:解决了创建多个类似对象的问题

  • Python 最短路径的几种求解方式

    目录 前言 前置知识 练习题 [单源最短路&迪杰斯特拉]畅通工程(续) [单源最短路 & spfa]最短路径 [多源最短路 & 弗洛伊德]牛牛聚会 前言 给出几个点的名称,在给出几个点的路径权重(简称路权)就可以计算一个地图中最短的路权是不是感觉很神奇.当然啦博主也觉得很神奇,因为博主比较笨嘛,如果只有几个点的图集的话还可以口算出来图中的最短路,如果有上千个点的话,博主的大脑就不够用了.所以呢咱们掌握最短路算法还是必须的,至少可以减少我们的脑力劳动嘛. 前置知识 图的话可以大致分为

  • js中常见的6种继承方式总结

    目录 前言 1.原型继承 2.盗用构造函数 3.组合继承 4.原型式继承 5.寄生式继承 6.寄生式组合继承 总结 前言 js是门灵活的语言,实现一种功能往往有多种做法,ECMAScript没有明确的继承机制,而是通过模仿实现的,根据js语言的本身的特性,js实现继承有以下通用的几种方式 温馨提示:本文中Super函数都是指父类,Sub函数都是代表子类.同时文中会涉及到“构造函数模式”和“工厂模式”,如果不熟悉的小伙伴,可以先看看这篇介绍 js常见的4种创建对象方式. 1.原型继承 实现: fu

  • JavaScript中常见的几种继承方式

    目录 原型继承 内存图 分析 盗用构造函数继承 分析 组合继承 原型链继承 寄生式继承 寄生组合式继承 原型继承 function Parent(name) { this.name = name } Parent.prototype.getName = function(){ return 'parentPrototype' + ' ' + this.name; } function Son() { } Son.prototype = new Parent(); console.log(new

  • Python线程的两种编程方式

    Python中如果要使用线程的话,python的lib中提供了两种方式.一种是函数式,一种是用类来包装的线程对象.举两个简单的例子希望起到抛砖引玉的作用,关于多线程编程的其他知识例如互斥.信号量.临界区等请参考python的文档及相关资料. 1.调用thread模块中的start_new_thread()函数来产生新的线程,请看代码: 复制代码 代码如下: ###        thread_example.py   import time  import thread  def timer(n

  • Python模块常用四种安装方式

    安装Python模块时大多还要依赖一些其他模块,可以利用自动化安装工具,会自动帮你解决依赖关系,自动帮你下载并安装所缺少的那些模块.这样我们可以有更多时间去用各种模块,而不是花很多时间在安装上. easy_insall的作用和perl中的cpan,ruby中的gem类似,都提供了在线一键安装模块的傻瓜方便方式,而pip是easy_install的改进版,提供更好的提示信息,删除package等功能.老版本的python中只有easy_install,没有pip. 现在pip是python官网上推

随机推荐