Cola Chan

可乐橙是一名设计师
这里是我记录生活和成长的地方

关注微信公众号[可乐橙]
一座见证我成长的后花园

密码学笔记之 RSA加密

什么是RSA

1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字命名,叫做RSA算法。

RSA算法基于一个十分简单的数论事实:将两个大质数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

RSA 原理

密钥生成

选择两个大质数p 和 q

计算这两个数的乘积 n = p * q

选择一个随机数e 作为加密密钥, 保证 e 和 (p - 1) (q - 1) 互为质数

计算解密密钥 d; e^d = 1 mod (p - 1) (q - 1)

......

364

密码学概览 入门笔记

密码学术语

对称密码 symmetric cryptography

公钥密码 public-key cryptography/非对称密码 asymmetric cryptography

混合密码系统 hybrid cryptosystem

单向散列函数(one-way hash function):可以检测出数据是否被篡改过,即保证数据完整性(integrity)

消息认证码(message authentication code):不但能够确认消息是否被篡改过,而且能够确认消息是否来自所期待的通信对象,是一种能保证完整性和提供认证(authentication)的密码技术。

数......

267

cryptokit更轻松的在python中实现加密解密

安装

pip install cryptokit

AES 使用

from cryptokit import AESCrypto

message = "hello cryptokit"

crypto = AESCrypto('WDMG1e38igW53YuxkE0SsKUDeLbULAtL', 'm2VYHdx41zRgvg6f')

data = crypto.encrypt(message, mode='cbc')

# b'\xaa<\x9d\xe9\xde\x0b\xd7\xe9\xfd\......

298

密码学笔记之 AES加密

什么是 AES

AES(高级加密标准) 在密码学中又称Rijndael加密法, 这个标准用来替代原先的DES

AES的历史过程

1997年4月15日,美国ANSI发起征集AES

2000年10月2日,NIST宣布Rijndael作为新的AES加密方案

什么是 Rijndael

187

密码学笔记之 什么是SHA

举个现实生活的例子

我们每个人都需要一个用于区分自己与他人不同的标志

也许你会想用姓名或者身份证等来代表你,但是这些都不是有效的区分你和他人的方法

因为姓名可能重复身份证可以伪造。所以目前最可靠的可能就是你的基因序列了,

但这样做的成本就太高了,所以指纹是一个不错的选择

互联网的例子

同样,互联网传输数据也需要标示一个文件,以确认文件的唯一性

而SHA就是生成文件唯一性的一种方式(算法)

SHA算法

SHA是一组算法的统称

SHA0 (发布之后很快就被NSA撤回,是SHA-1的前身)

SHA1

SHA2

SHA224

SH......

334

Python装饰器

什么是装饰器

Python中的装饰器本质上就是在不改变函数本身的情况下包装一个函数成为另一个函数的语法糖

装饰器简单示例

def wrapper(func):

def inner(*args, **kwargs):

print(func.__name__, *args, **kwargs)

return func(*args, **kwargs)

return inner

@wrapper

def print_func(wo......

104

使用cryptography进行AES的cbc模式加密

cryptography 是一个python加密库

cryptography is a package designed to expose cryptographic primitives and recipes to Python developers. 文档 cryptography.io

以前使用过很多不同的加密库,但pyhton界貌似没有一个统一的库。

但需要用到RSA加密时用到一个库,需要AES时又要装另一个库,这对于库的使用和项目管理变得很不友好!

直到有一天发现了伯乐在线的一篇文章,决定了以后加密就用cryptography这个库了

Crypt......

133

Python内建函数

Python内建模块

sys.getrefcount 获取对象引用计数

import sys

words = 'Hello world!'

sys.getrefcount(words)

sys.getrecursionlimit 获取递归最大层数

import sys

sys.getrecursionlimit()

sys.getdefaultencoding 获取默认编码

import sys

sys.getdefaultencoding()

sys.getsizeof 获取对象的字节大小

import sys

words = 'Hello w......

75

发布你的Python包

简史

disutils从1998年便已经是python标准库的一部分。它最早由Greg Ward开发。

在2000年开发停止,从那以后,一些开发人员开始在其基础上继续开发他们自己的工具。其中

最成功的继任者便是打包库setuptools

使用setuptools打包python库

setup.py代码示例

# -*- coding: utf-8 -*-

from setuptools import setup, find_packages

setup(

name='yourapp',

version='0.1',

descriptio......

92