реализация для [закрытых] ключей продуктов

Подумайте о рефакторинге вашего кода!

Чтобы ответить на ваш вопрос, вы можете передать строку из main.py в gen_json.main('...') и далее в gen_json.get_config('...'). Argparse оценит эту строку, которую нужно разбить на список.
Вы по-прежнему можете вызывать generate.py с параметрами командной строки.

Обратите внимание, что я удалил ненужный / неправильный код / ​​идентификацию , чтобы показать, как это может работать в принципе.

generate.py:

import argparse
import sys


def main(cliParams=None):
  cfg, data, date = get_config(cliParams)
  print (cfg, data, date)

  #json_location = cfg
  #json_database = data["config"]["database"]
  #json_collection = data["config"]["collection"]
  #json_path = "{0}/{1}{2}/{3}/{3}.json".format(json_location, date, json_database, json_collection)
  #print json_path

def get_config(cliParams=None):
  parser = argparse.ArgumentParser()
  parser.add_argument("-p", "--parameter-file", action="store", required=True)
  parser.add_argument("-e", "--export-data-file", action="store", required=True)
  parser.add_argument("-d", "--export-date", action="store", required=True)

  if not cliParams:
    args = parser.parse_args()
  else:
    args = parser.parse_args(cliParams.split())
  #return [args.parameter_file, funcs.read_config(args.export_data_file), args.export_date]
  return [args.parameter_file, args.export_data_file, args.export_date]


if __name__ == "__main__":
  logging.getLogger().setLevel(logging.INFO)
  main()

main.py:

import os
import generate as gen_json

def generate_json():
  path = '/tmp/foo.yml'
  data = 'export_agent_core_agent.yaml'
  date = '2019-01-15'

  argParseString = '-p %s -e %s -d %s' % (path, data, date)
  gen_json.main(argParseString)

if __name__ == '__main__':
  generate_json()

Печать на стандартный вывод:

>>> /tmp/foo.yml export_agent_core_agent.yaml 2019-01-15
21
задан Community 23 May 2017 в 12:16
поделиться

5 ответов

Симметричные алгоритмы ограничены, в том любом взломщике новичка с дизассемблером может найти Ваш ключ (или алгоритм используемый для генерации одного) и сделать "keygen".

поэтому асимметричная криптология является способом пойти. Основная предпосылка - что-то вроде этого:

  • , Когда пользователь покупает лицензию от Вас, Вы собираете определенные детали идентификации о пользователе и/или их среде (обычно, это - просто полное имя; иногда компания, также).
  • Вы делаете 128-разрядный хеш MD5 этой информации.
  • Используя 128-разрядное Эллиптическая кривая crypto, зашифруйте этот хеш с помощью частный , включают сервер.
  • 128-разрядный шифрованный текст может быть представлен пользователю как 25 символьных строк, состоящих из букв и цифр (плюс разделение тире для удобочитаемости). Заметьте что 26 букв + 10 цифр = 36 дискретных значений, и что 36^25> 2^128.
  • пользователь вводит этот ключ продукта в Ваше регистрационное диалоговое окно. Клиентское программное обеспечение преобразовывает его назад в 128-разрядное число (16 байтов), дешифрует то использование открытого ключа Вашего EC crypto и сравнивает результат с хешем MD5 персональных данных пользователя, которые должны соответствовать тому, что использовалось для регистрации.

Это - просто основная идея, конечно. Для получения дополнительной информации и исходный код, см. Ключи продуктов На основе Шифрования в эллиптических кривых .

31
ответ дан 29 November 2019 в 21:17
поделиться

Жизнь более проста при простой покупке решения.

http://www.kagi.com/kagisolutions/index.php

Kagi позволяет Вам взимать плату, и они помогают Вам управлять ключами.

1
ответ дан 29 November 2019 в 21:17
поделиться

Парень вел блог о том, как он обработал вопрос регистрационных номеров. Одна из его записей в блоге Генерирующие Уникальные Регистрационные номера .

0
ответ дан 29 November 2019 в 21:17
поделиться

Да, RSA и AES являются двумя совсем другими вещами:

  • RSA является шифрованием с открытым ключом, включая открытый ключ и закрытый ключ, и является довольно медленным. Основное использование должно настроить безопасный обмен симметричным сеансовым ключом шифрования.
  • AES является симметричным шифрованием, которое быстро и безопасно.

, Так как Ваше приложение не связывается по каналам общего доступа, и использование криптографии ограничено активацией продукта / регистрация, Вы захотите пойти с симметричным шифром. Преимущества шифров с открытым ключом находятся в управлении ключами, которое Вы будете обрабатывать на своем веб-сайте или по электронной почте.

Примечание, что Вы не должны распределять тот же ключ для каждого клиента. Вы могли генерировать хеш части информации о регистрации и XOR это с чем-то еще (фиксированный сеансовый ключ, возможно). Отправьте это клиенту, и программа могла генерировать тот же хеш, и XOR будет ключ, который Вы отправили для создания исходного фиксированного ключа.

Контакт с криптографией не что-то, чтобы быть сделанным слегка. Как Вы упоминаете, Вы ожидаете, что это будет взломано. При выполнении собственного, это почти наверняка произойдет. Можно все еще использовать собственную реализацию, чтобы "сохранить честных людей честными", но понять, что это - насколько Вы доберетесь. При необходимости в чем-то более сильном тогда, необходимо купить решение после проведения полного исследования на решениях.

0
ответ дан 29 November 2019 в 21:17
поделиться

Можно проверить этот статья Code Project . Это описывает реализацию программный ключ на основе MAC-адреса машины, где программное обеспечение выполняется. Метод не идеален, поскольку сам автор признает, и это немного отличается от того, что Вы ищете, но возможно это может помочь Вам.

0
ответ дан 29 November 2019 в 21:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: