RSA算法在Python Django中的简单应用
说明
RSA算法是当今使用最广泛,安全度最高的加密算法。
• RSA算法的安全性理论基础
[引]根据百科介绍,对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。假如有人找到一种快速因数分解的算法的话,那么用RSA加密的信息的可靠性就肯定会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA钥匙才可能被强力方式解破。到目前为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。
• RSA算法使用
- 通常使用公钥进行加密,使用私钥进行解密。
- 如上所说,钥匙的长度尽量设置长一些,在实际应用过程中,通常设置为1024或2048
• 在Python Django中简单应用RSA算法
以下是RSA在Python Django中的简单应用实例
• 安装pycrypto加密算法库
下载pycrypto-2.6.1.tar.gz并解压,使用python setup.py install进行安装即可,执行from Crypto.PublicKey import RSA无报错,则说明安装成功
• 生成秘钥对
1.通过以下代码得到公钥和私钥
from Crypto import Random
from Crypto.PublicKey import RSA
random_generator = Random.new().read
rsa = RSA.generate(1024, random_generator)
rsa_private_key = rsa.exportKey()
rsa_public_key = rsa.key().exportKey()
以上代码,rsa_private_key就是生成的公钥,格式如下:
-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----
rsa_public_key 就是生成的私钥,格式如下:
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----
2.把生成的秘钥对保存在配置文件中
• 在Django表单中使用公钥对信息进行加密
1.user.py
from django.conf import settings
public_key = settings.RSA_PUBLIC_KEY
kwargs = {
'public_key' : public_key,
}
return render(request, 'accounts/login.html', kwargs)
2.login.html
2.1 引入js
<script src="/static/js/jsencrypt.min.js"></script>
2.2 页面form表单部分
<form class="form-horizontal" role="form" id="login_form" action="{% url "login" %}" method="POST" >
<div class="box-body">
{% csrf_token %}
<div class="form-group">
<label class="control-label col-md-3">账号:</label>
<div class="col-sm-12">
<input type="text" class="form-control" id="user_name" name="user_name" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3">密码:</label>
<div class="col-sm-12">
<input type="password" class="form-control" name="password" id="password" value="" onKeyPress="keypress(event)">
</div>
</div>
{% for item in form %}
<div class="text-left">
<div class="col-md-offset-1 col-md-10">
{{item.errors}} {{error_msg}}
</div>
</div>
{% endfor %}
<input type="hidden" name="public_key" id="public_key" value="{{ public_key }}">
</div>
<div class="box-footer">
<input type="hidden" name="next" value="{{ next }}" />
<input style="width: 340px;" type="submit" class="btn btn-info pull-right submit" onfocus="this.blur()" onclick="doLogin()" value="登录" >
</div>
</form>
2.3 js部分
<script type="text/javascript">
function doLogin()
{
var password_old = document.getElementById("password").value;
var encrypt = new JSEncrypt();
encrypt.setPublicKey($('#public_key').val());
var password_new = encrypt.encrypt(password_old);
document.getElementById("password").value = password_new;
login_form.submit();
}
</script>
• 在Django后台中使用私钥对前端POST的加密信息进行解密
from Crypto import Random
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5, PKCS1_OAEP
from django.conf import settings
import base64
random_generator = Random.new().read
RSA.generate(1024, random_generator)
rsakey = RSA.importKey(settings.RSA_PRIVATE_KEY)
cipher = PKCS1_v1_5.new(rsakey)
password = cipher.decrypt(base64.b64decode(password), random_generator)
以上代码,password则为解密后的数据
RSA算法在Python Django中的简单应用的更多相关文章
- Python Django中QQ邮箱授权码问题
Python Django中QQ邮箱授权码问题 系统及软件版本如下: Ubuntu Kylin 16.04 Python 3.5.1 Django 1.9.7 PyCharm Community Ed ...
- Python Django 中的STATIC_URL 设置和使用解析
使用Django静态设置时,遇到很多问题,经过艰苦的Baidu, stack overflow, Django原档阅读,终于把静态图片给搞出来了.特记录下来. 关键的概念:Django中,静态资源的存 ...
- python Django中的cookie和session
目录 Cookie 1.1获取Cookie 1.2设置Cookie Session 1.数据库Session 2.缓存Session 3.文件Session 4.缓存+数据库Session Cooki ...
- RSA算法及其在iOS中的使用
因为项目中需要传输用户密码,为了安全需要用RSA加密,所以就学习了下RSA加密在iOS中的应用. 关于RSA的历史及原理,下面的两篇文章讲的很清楚了: http://www.ruanyifeng.c ...
- python django中使用sqlite3数据库 存储二进制数据ByteArray
在python中使用sqlite3数据库存储二进制流数据ByteArray,在django使用sqlite3数据库时,有时候也要注意最好使用二进制流ByteArray插入字符串. 使用ByteArra ...
- python django中的orm外键级联删除
今天添加了一个路由表,路由表做外键,然后添加了几个组,路由表为组的外键,当我使用删除功能对路由表进行删除时,竞然将我的组也相当的删除了:尽管这是测试,但放到生产环境中还是会发生意外的:这个问题要解决: ...
- Python Django中一些少用却很实用的orm查询方法
一.使用Q对象进行限制条件之间 "或" 连接查询 from django.db.models import Q from django.contrib.auth.models im ...
- python django中restful框架的使用
在使用django进行前后台分离开发时通常会搭配django-rest-framework框架创建RESTful风格的接口API.框架介绍及版本要求可参考官方地址:https://www.django ...
- python + django + dwebsocket 实现简单的聊天室
使用库dwebsocket,具体参考此处 views.py: from dwebsocket.decorators import accept_websocket,require_websocket ...
随机推荐
- Leedcode算法专题训练(栈和队列)
1. 用栈实现队列 232. Implement Queue using Stacks (Easy) Leetcode / 力扣 class MyQueue { Stack<Integer> ...
- 玉帝传美猴王上天,大闹天宫之Java设计模式:命令模式
目录 示例 改进代码 命令模式 定义 意图 主要解决问题 何时使用 优缺点 玉帝传美猴王上天 命令模式和策略模式的区别 示例 系统需要设计一个命令行界面,用户可输入命令来执行某项功能,系统的功能会不断 ...
- IP Networks UVA - 1590
Alex is administrator of IP networks. His clients have a bunch of individual IP addresses and he de ...
- 关于nacos在windows系统启动时闪退的问题
nacos可以用来作为springcloud的配置中心使用,但在windows系统下使用的时候需要注意. nacos下载后解压,可以直接点击文件bin目录下的 startup.cmd 就可以启动. ...
- 元素居中的两种方法,transform和margin
1.transform :translate(-50%,-50%) <!DOCTYPE html> <html lang="en"> <head> ...
- 【JDK8】Java8 新增BASE64加解密API
什么是Base64编码? Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法 基于64个字符A-Z,a-z,0-9,+,/ ...
- Python实现简单HTTP服务器
Python实现简单HTTP服务器(一) 一.返回固定内容 复制代码 coding:utf-8 import socket from multiprocessing import Process de ...
- VRRP中的上层回的路由
如图,PC1和PC2处于不同网段,他们到AR3都有两条路可以选,现在要让他们到达AR3负载均衡,并且当AR1和 AR2的其中一个路由器挂了之后,他们仍然可以正常到达AR3. 他们去往AR3的VRRP的 ...
- apk 脱壳
在理解android的类加载后,我们可以愉快对apk来脱壳了.脱壳重要的是断点: 断点:在哪个位置脱壳,这里着重指的是在哪个方法 先介绍断点,我们只要知道加壳是用哪个方法来加载dex的,hook这个方 ...
- UVA11722(见面概率)
题意: 有一个车站,两个人想要在这个车站见面,第一个人会在t1到t2之间的任意一个时刻到(时间上任意一点概率一样),并且停留w时间,第二个人是s2到s2的时间段到,停留也是w,问两个人的见 ...