说明

RSA算法是当今使用最广泛,安全度最高的加密算法。


• RSA算法的安全性理论基础

[引]根据百科介绍,对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。假如有人找到一种快速因数分解的算法的话,那么用RSA加密的信息的可靠性就肯定会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA钥匙才可能被强力方式解破。到目前为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。

• RSA算法使用
  1. 通常使用公钥进行加密,使用私钥进行解密。
  2. 如上所说,钥匙的长度尽量设置长一些,在实际应用过程中,通常设置为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中的简单应用的更多相关文章

  1. Python Django中QQ邮箱授权码问题

    Python Django中QQ邮箱授权码问题 系统及软件版本如下: Ubuntu Kylin 16.04 Python 3.5.1 Django 1.9.7 PyCharm Community Ed ...

  2. Python Django 中的STATIC_URL 设置和使用解析

    使用Django静态设置时,遇到很多问题,经过艰苦的Baidu, stack overflow, Django原档阅读,终于把静态图片给搞出来了.特记录下来. 关键的概念:Django中,静态资源的存 ...

  3. python Django中的cookie和session

    目录 Cookie 1.1获取Cookie 1.2设置Cookie Session 1.数据库Session 2.缓存Session 3.文件Session 4.缓存+数据库Session Cooki ...

  4. RSA算法及其在iOS中的使用

    因为项目中需要传输用户密码,为了安全需要用RSA加密,所以就学习了下RSA加密在iOS中的应用. 关于RSA的历史及原理,下面的两篇文章讲的很清楚了:  http://www.ruanyifeng.c ...

  5. python django中使用sqlite3数据库 存储二进制数据ByteArray

    在python中使用sqlite3数据库存储二进制流数据ByteArray,在django使用sqlite3数据库时,有时候也要注意最好使用二进制流ByteArray插入字符串. 使用ByteArra ...

  6. python django中的orm外键级联删除

    今天添加了一个路由表,路由表做外键,然后添加了几个组,路由表为组的外键,当我使用删除功能对路由表进行删除时,竞然将我的组也相当的删除了:尽管这是测试,但放到生产环境中还是会发生意外的:这个问题要解决: ...

  7. Python Django中一些少用却很实用的orm查询方法

    一.使用Q对象进行限制条件之间 "或" 连接查询 from django.db.models import Q from django.contrib.auth.models im ...

  8. python django中restful框架的使用

    在使用django进行前后台分离开发时通常会搭配django-rest-framework框架创建RESTful风格的接口API.框架介绍及版本要求可参考官方地址:https://www.django ...

  9. python + django + dwebsocket 实现简单的聊天室

    使用库dwebsocket,具体参考此处 views.py: from dwebsocket.decorators import accept_websocket,require_websocket ...

随机推荐

  1. Leedcode算法专题训练(哈希表)

    Java 中的 HashSet 用于存储一个集合,可以查找元素是否在集合中.如果元素有穷,并且范围不大,那么可以用一个布尔数组来存储一个元素是否存在.例如对于只有小写字符的元素,就可以用一个长度为 2 ...

  2. 06_pytorch的autograd操作

    06_pytorch的autograd操作 目录 一.引言 二.Variable 2.1 Variable 的数据结构 2.2 反向传播 2.3 autograd 求导数和手动求导数 三.计算图 3. ...

  3. 解决Echarts+<el-tab-pane>的警告:Can't get DOM width or height

    1 问题描述 环境: Chrome 87 Element-Plus Vue3.0.5 <el-tab>+<el-tab-pane>中使用Echarts 警告如下: 2 代码 & ...

  4. Kickdown UVA - 1588

    A research laboratory of a world-leading automobile company has received an order to create a specia ...

  5. Day16_92_Java IO 基础概念

    Java IO 基础概念 流根据方向分为 输入流 和 输出流. 注意 : 输入和输出是相对与内存而言的,从内存出来就是输出,到内存中去就是输入. 输入叫做 "读" , 输出叫做 & ...

  6. Android使用ContentProvider初始化SDK库方案总结

    做Android SDK开发的时候,一般我们会将初始化的方法封装为,然后让调用SDK的开发者在Application的onCreate方法中进行初始化.但是目前一些主流的SDK框架,并没有提供相关的方 ...

  7. Java JFR 民间指南 - 事件详解 - jdk.ObjectAllocationOutsideTLAB

    重新申请 TLAB 分配对象事件:jdk.ObjectAllocationOutsideTLAB 引入版本:Java 11 相关 ISSUES: JFR: RecordingStream leaks ...

  8. Android埋点技术概览

    注:本文同步发布于微信公众号:stringwu的互联网杂谈Android无埋点技术概览 本文是Android无埋点系列的开篇---埋点技术概览 1 背景 埋点是数据产品经理(分析师)基于业务需求,对用 ...

  9. 深入浅出:MySQL的左连接、右连接、等值连接

    深入浅出:MySQL的左连接.右连接.等值连接 三种连接的语法 为便于更多的技友快速读懂.理解,我们只讨论2张表对象进行连接操作的情况,大于2张表对象进行的连接操作原理也是一样的. 1.左连接(LEF ...

  10. 源码分析SpringCloud Gateway如何加载断言(predicates)与过滤器(filters)

    我们今天的主角是Gateway网关,一听名字就知道它基本的任务就是去分发路由.根据不同的指定名称去请求各个服务,下面是Gateway官方的解释: https://spring.io/projects/ ...