Я использую Python + Flask для генерации пары ключей, используя модуль с именем pip cryptography
, (с алгоритмами шифрования stati c и stati c размеры клавиш)
Мне нужно сделать их переменными в зависимости от выбора пользователя, поэтому я создал HTML + JS страницу, где пользователь мог выбрать алгоритм и размер ключа в зависимости от своих потребностей
( Example1: USER1 хочет создать пару ключей с использованием Алгоритм "RSA" с использованием Keysize "1024" )
( Example2 : USER2 хочет сгенерировать пару ключей, используя Алгоритм "DSA" , используя Размер ключа "2048" )
Как интегрировать страницу HTML с flask framework, чтобы кнопка "Generate key pair" могла запускать мой python API, и возвращаемое значение зависит от выбора HTML
HTML output
Flask вывод
Низкий уровень знаний по обоим Flask, HTML
Javascript + HTML ЧАСТЬ:
var select1 = document.getElementById('select1');
var select2 = document.getElementById('select2');
var config = {
'RSA' : [ '1024', '2048', '3072' ],
'DSA' : [ '1024', '2048', '3072' ],
'EC' : [ 'prime256v1', 'sect571k1', 'sect571r1', 'brainpoolP512r1' ]
}
var addItemToSelect = function (select, label) {
var option = document.createElement('option');
option.textContent = label;
option.value = label;
select.appendChild(option);
}
for (var algo in config) {
addItemToSelect(select1, algo);
}
select1.addEventListener('change', function () {
var selection = this.options[this.selectedIndex].value;
var keysize = config[selection];
select2.length = 0
addItemToSelect(select2, '');
for (var key in keysize) {
addItemToSelect(select2, keysize[key]);
}
});
<!DOCTYPE html>
<html lang="en">
<body>
<div class="input-group" style="margin-left: 20px;">
<div>
<label>Algorithm</label>
<select class="form-control" id="select1">
<option></option>
</select>
</div>
<div>
<label>Key size / Curve</label>
<select class="form-control" id="select2">
<option></option>
</select>
</div>
</div>
<input class="form-control"
type="button"
value="Generate key pair">
</body>
</html>
Python + Flask ЧАСТЬ
import yaml
from flask import Flask, render_template, request, jsonify
from flask_restful import Api, Resource
from flask_swagger_ui import get_swaggerui_blueprint
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import rsa, dsa, ec
from cryptography.hazmat.backends import default_backend
app = Flask (__name__)
api = Api (app)
# swagger ui documentation
SWAGGER_URL = '/doc'
API_URL = '/static/swagger.yaml'
SWAGGERUI_BLUEPRINT = get_swaggerui_blueprint(
SWAGGER_URL,
API_URL,
config={
'app_name': "Keygen"
}
)
app.register_blueprint(SWAGGERUI_BLUEPRINT, url_prefix=SWAGGER_URL)
# main framework route
@app.route('/', methods=['GET'])
def index():
return '<h1>CryptoBox (v0.1): The cryptography toolbox</h1>'
# Key generator API route
@app.route('/api/keygen', methods=['POST','GET'])
def keygen():
# generate private/public key pair / RSA / 2048 / 65537
key = rsa.generate_private_key(backend=default_backend(), public_exponent=65537, \
key_size=2048)
# get private key in PEM container format / no encryption
pem_private = key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.TraditionalOpenSSL,
encryption_algorithm=serialization.NoEncryption())
# get public key in PEM container format
pem_public = key.public_key().public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo)
# decode to printable strings / utf-8
private_key_str = pem_private.decode('utf-8')
public_key_str = pem_public.decode('utf-8')
# output in YAML format
key_data = {
"privateKey": private_key_str,
"publicKey": public_key_str
}
return (yaml.dump(key_data, indent=0, sort_keys=True))
if __name__ == '__main__':
app.run(host='0.0.0.0',port=5000, debug=True)
Спасибо за ваше время и помощь!