数据测试与分析需要经常将用户的敏感信息加密,将原有的明文信息经过加密算法转换成不可读的字符串,从而达到加密的目的,常用的加密算法有MD5、SHA256、RSA等。
1.MD5、SHA256都是哈希算法,python中都来自hashlib包,主要是将一段字符串通过一定的加密算法转换成另一种字符串,因具有不可逆的特点,从而保证了数据的安全。
2.RSA是一种非对称加密算法,对极大整数做因数分解的难度决定了 RSA 算法的可靠性,假如有人找到一种快速因数分解的算法的话,那么用 RSA 加密的信息的可靠性就肯定会极度下降,目前看来找到这样的算法的可能性非常小。
MD5加密算法的Python举例:
# -*- coding: utf-8 -*-
import hashlib
import csv
class Md5Func:
def __init__(self):
pass
@staticmethod
def to_md5(target):
m = hashlib.md5()
m.update(target.encode('utf-8'))
return m.hexdigest()
def transfer_func(self, csv_reader, csv_writer):
for row in csv_reader:
row_list = list(row)
if str(row[0]).find('name') > 0:
row_list.append('id_md5')
row_list.append('num_md5')
else:
row_list.append(self.to_md5(row[1]))
row_list.append(self.to_md5(row[2]))
csv_writer.writerow(row_list)
return csv_writer
def main(self, path_input, data):
data_out = open((path_input + '/{name}_md5.csv').format(name=data.split('.')[0]), 'w', encoding='utf8',
newline='')
csv_writer = csv.writer(data_out)
data_in = open((path_input + '/{dataset}').format(dataset=data), encoding='utf-8')
csv_reader = csv.reader(data_in)
self.transfer_func(csv_reader, csv_writer)
data_out.close()
data_in.close()
if __name__ == '__main__':
path_in = './'
Md5Func().main(path_in, 'abc.csv')
结果展示
RSA加密算法举例:
# -*- coding:utf-8 -*-
import os
import rsa
class RsaFunc:
def __init__(self):
pass
# 生成秘钥并保存
@staticmethod
def pub_privkey(n):
(pubkey, privkey) = rsa.newkeys(n)
file_path = os.path.split(os.path.realpath(__file__))[0] + '\\output'
if not os.path.exists(file_path):
os.mkdir(file_path)
with open(file_path + '/public.pem', 'w+') as f:
f.write(pubkey.save_pkcs1().decode())
with open(file_path + '/private.pem', 'w+') as f:
f.write(privkey.save_pkcs1().decode())
return file_path
# 导入公钥并加密得到密文
def encode_rsa(self, info, n):
file_path = self.pub_privkey(n)
with open(file_path + '/public.pem', 'r') as f:
pubkey = rsa.PublicKey.load_pkcs1(f.read().encode())
crypto_text = rsa.encrypt(info.encode(), pubkey)
return file_path, crypto_text
# 导入私钥并解密得到明文
@staticmethod
def decode_rsa(file_path, crypto_text):
with open(file_path + '/private.pem', 'r') as f:
privkey = rsa.PrivateKey.load_pkcs1(f.read().encode())
message = rsa.decrypt(crypto_text, privkey).decode()
return message
if __name__ == '__main__':
info_in = '张三'
filepath, cp_text = RsaFunc().encode_rsa(info_in, 1024)
ex_text = RsaFunc.decode_rsa(filepath, cp_text)
RSA结果截图展示: