Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung in die Python-RSA-Verschlüsselung, -Entschlüsselung und Base64-Kodierung und -Dekodierung

Einführung in die Python-RSA-Verschlüsselung, -Entschlüsselung und Base64-Kodierung und -Dekodierung

高洛峰
高洛峰Original
2017-03-21 09:12:102711Durchsuche

In letzter Zeit gab es einen Bedarf, die Sicherheit der RSA-Verschlüsselung und -Entschlüsselung zu untersuchen. Ich habe mir Beispielartikel zu Baidu online angesehen, und es gibt nur wenige Artikel zum Speichern, Übertragen und Drucken verschlüsselter Textinformationen, und sie sind alle gleich. Direkt in einem Skript werden die verschlüsselten Textinformationen der -Variable zugewiesen und anschließend wird sofort die Entschlüsselung aufgerufen. Nachdem ich sorgfältig über den Prozess der RSA-Verschlüsselung und -Entschlüsselung nachgedacht hatte, stellte ich fest, dass es zwei Enden gibt, ein Ende ist das Verschlüsselungsende und das andere Ende ist das Entschlüsselungsende, die sich im Allgemeinen nicht auf demselben Computer befinden. Hier habe ich nur das Speichern in einer Datei und das anschließende Auslesen simuliert; die Methode zur Übertragung über das Netzwerk ist ähnlich.

Der mit RSA verschlüsselte Chiffretext kann nicht direkt als Text angezeigt werden, da einige Binärdaten nicht mithilfe der Textinformationskodierung angezeigt werden können. Zum Speichern, Netzwerkübertragen und Drucken ohne verstümmelte Zeichen ist eine Base64-Kodierung zur Konvertierung erforderlich. Durch die Base64-Kodierung und -Dekodierung können einige Binärdaten, die nicht direkt mit Dateiinformationen kodiert werden können, in reguläre Binärdaten umgewandelt werden.

#/usr/bin/env python
# -*- coding: utf-8 -*-
import rsa
import sys
import base64

# 打印 python 版本 与 windows 系统编码
print("---- 1 ----")
print(sys.version)
print(sys.getdefaultencoding())
print(sys.getfilesystemencoding())

# 先生成一对密钥,然后保存.pem格式文件,当然也可以直接使用
print("---- 2 ----")
(pubkey, privkey) = rsa.newkeys(1024)
pub = pubkey.save_pkcs1()
print(type(pub))
pubfile = open('public.pem','w+')
pubfile.write(pub.decode('utf-8'))
pubfile.close()

print("---- 3 ----")
pri = privkey.save_pkcs1()
print(type(pri))
prifile = open('private.pem','w+')
prifile.write(pri.decode('utf-8'))
prifile.close()

# load公钥和密钥
print("---- 4 ----")
message = 'dPabdbGDpFTrwwgydVafdlsadlfsal%46645645s'
print('message:',type(message))
with open('public.pem') as publickfile:
    p = publickfile.read()
    print(type(p))
    pubkey = rsa.PublicKey.load_pkcs1(p.encode('utf-8'))
with open('private.pem') as privatefile:
    p = privatefile.read()
    print(type(p))
    privkey = rsa.PrivateKey.load_pkcs1(p.encode('utf-8'))

# 用公钥加密、再用私钥解密
crypto = rsa.encrypt(message.encode('utf-8'),pubkey)
print(crypto)

print("---- 5 ----")
print('crypto:',type(crypto))
print('cry_base64:',base64.encodestring(crypto))
print('cry_base64_utf8:',base64.encodestring(crypto).decode('utf-8'))
# 保存到本地文件
cry_file = open('cry_file.txt','w+')
cry_file.write(base64.encodestring(crypto).decode('utf-8'))
cry_file.close()

print("---- 6 ----")
# 从本地文件读取
cry_file = open('cry_file.txt','r')
cry_text = ''
for i in cry_file.readlines():
    cry_text += i

print('cry_text_type:',type(cry_text))
print('cry_text:',cry_text)
print('cry_base64:',cry_text.encode('utf-8'))
crypto_tra = base64.decodestring(cry_text.encode('utf-8'))

print("---- 7 ----")
assert crypto == crypto_tra
print(crypto)

print("---- 8 ----")
plaintext = rsa.decrypt(crypto,privkey)
assert  message == plaintext.decode('utf-8')
print(plaintext.decode('utf-8'))


Das obige ist der detaillierte Inhalt vonEinführung in die Python-RSA-Verschlüsselung, -Entschlüsselung und Base64-Kodierung und -Dekodierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn