Шифрование Python RSA – использование закрытого ключа для шифрования и открытого ключа для расшифровкиPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Шифрование Python RSA – использование закрытого ключа для шифрования и открытого ключа для расшифровки

Сообщение Anonymous »

Я работаю над созданием сервера проверки лицензионного ключа, который разблокирует часть программного обеспечения. Платформа C++, которую я использую для клиента, имеет встроенную функциональность, которая позволяет серверу отправлять обратно ответ POST с зашифрованным сообщением RSA, содержащим данные, в которых говорится, что лицензионный ключ действителен для машины, отправляющей POST.
Способ, которым платформа обрабатывает шифрование ответов, заключается в размещении открытого ключа в клиентском программном обеспечении, а закрытого ключа на сервере, который выполняет обратную версию типичного шифрования RSA. Я понимаю, что это не обязательно безопасно, но для данного варианта использования это не имеет значения. Я также читал, что это можно назвать подписанием, а не шифрованием, но я не уверен.
Я пишу сервер на Python и поэтому хочу выполнить обратное шифрование RSA с использованием библиотек Python.< /p>
Я попробовал несколько разных вещей, в основном используя библиотеку pycryptodome, но не смог добиться успеха. Ниже я нашел функцию шифрования и дешифрования, но она выдает неправильную ошибку заполнения при попытке использовать b64decode. Я пытался выяснить, как исправить заполнение, но безуспешно.
Я предоставил образцы закрытого и открытого ключей, а также testMsg, который платформа выдает при шифровании с помощью закрытого ключа.< /p>
from http.server import BaseHTTPRequestHandler, HTTPServer
import time
import sqlite3
from random import choice
from string import ascii_uppercase, digits
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
import base64

hostName = "localhost"
serverPort = 8080
serverVersion = "v0.2.3"
privateRSAKey = "279808e40cef4350640026c8739e7201826d002cec7e260f3d16d0cf786842f1,602815978d207ee7ce4982c23d5c39729da90af57b850863165936256e3b7227"
publick = "11,602815978d207ee7ce4982c23d5c39729da90af57b850863165936256e3b7227"
testMsg = "#62a29db7f09c76d2b28a2313911cbaad1a89b235ab52d05f704a9110c517b1db90d824d88188d08cb2b9002ba2f64e0bdf78a393a7cfc3f2bbad0e43f8167184975183357c2a73e1537fb0fe47e74586d553bc68e0e4e03d6b1ef67d03e57ea794f0029db1d6b2ef048db4e6b019d198e2876e925dc3036bbcca85369f67435884a9ff60a28a3e6131056805b58f804e74a8a224453b5099f831c57a16f87e"

def encrypt_private_key(a_message, private_key):
encryptor = PKCS1_OAEP.new(private_key)
encrypted_msg = encryptor.encrypt(a_message)
print(encrypted_msg)
encoded_encrypted_msg = base64.b64encode(encrypted_msg)
print(encoded_encrypted_msg)
return encoded_encrypted_msg

def decrypt_public_key(encoded_encrypted_msg, public_key):
encryptor = PKCS1_OAEP.new(public_key)
decoded_encrypted_msg = base64.b64decode(encoded_encrypted_msg)
print(decoded_encrypted_msg)
decoded_decrypted_msg = encryptor.decrypt(decoded_encrypted_msg)
print(decoded_decrypted_msg)

def verify_product(product):
if product == "Test":
return True
else:
return False

def verify_email(email):
if email == "[email protected]":
return True
else:
return False

def verify_license_key(licenseKey):
sql_connection = sqlite3.connect("SynergyLicenseKey.db");
cur = sql_connection.cursor()

data = cur.execute(f"SELECT * FROM LICENSEKEYS WHERE LicenseKey = '{licenseKey}'")

# if rows return it is a valid license key
for row in data:
sql_connection.close()
return True

sql_connection.close()
return False

def generate_license_key():
# Using random.choice to select characters from uppercase letters and digits
key = ''.join([choice(ascii_uppercase + digits) for _ in range(7)]) + '-' + \
''.join([choice(ascii_uppercase + digits) for _ in range(7)]) + '-' + \
''.join([choice(ascii_uppercase + digits) for _ in range(7)])

return key

class testServer(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)

def do_POST(self):
content_length = int(self.headers['Content-Length'])
post_data = self.rfile.read(content_length)
request_data = post_data.decode('utf-8').split('&')
print(request_data)

if verify_product(request_data[0][8:]) and verify_email(request_data[1][6:]):
response = bytes(f'{test}', "utf-8")
else:
response = bytes('', "utf-8")

self.send_response(200)
self.send_header("Content-Length", str(len(response)))
self.end_headers()

self.wfile.write(response)

if __name__ == "__main__":
webServer = HTTPServer((hostName, serverPort), testServer)
print("Server - " + serverVersion + " - http://%s:%s" % (hostName, serverPort))
decrypt_public_key(testMsg, publick)
try:
webServer.serve_forever()
except KeyboardInterrupt:
pass

webServer.server_close()
print("Server stopped.")



Подробнее здесь: https://stackoverflow.com/questions/785 ... to-decrypt
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Использование ключа RSA Azure Key Vault для шифрования и расшифровки строк
    Anonymous » » в форуме C#
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Шифрование ключа AES с помощью открытого ключа RSA
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Шифрование данных в формате ключа формата PKCS#7. Алгоритм шифрования ключа: RSA/NONE/OAEPWithSHA256AndMGF1Padding.
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Расшифровка строки с помощью закрытого ключа (размер ключа RSA 2048)
    Anonymous » » в форуме Php
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Расшифровка строки с помощью закрытого ключа (размер ключа RSA 2048)
    Anonymous » » в форуме Php
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»