Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 10, 2018 15:53:46

VIRTOK
Зарегистрирован: 2017-10-23
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Шифрование пароля в файле конфигурации ini

Цель: зашифровать пароль хранящийся в файле конфигурации
пароль должен безопасно хранится в файле config.ini но из файла конфигурации программа должна его подхватывать не в зашифрованном виде

Файл config.ini

 [connect]
login = user
pas = 123456
[FTP]
URL = ftp.ru.debian.org/debian/dists/Debian9.5/

Файл Test.py
 import ConfigINI
config = ConfigINI.loadConfig()
log = config['login']
pas = config['pas']
print(log, pas)



Файл ConfigINI.py
 import os
import configparser
LocalDir = os.getcwd() # Путь к локальной директории
def loadConfig():
    config = configparser.ConfigParser()
    config.read("config.ini")
    #config.read(str(LocalDir+"\\config.ini"))
    login = config.get('connect','login')
    pas = config.get('connect','pas')
    URL = config.get('FTP','URL')
    return {'login':login,'pas':pas,'URL':URL}
    #return {'login':login,'pas':pas}

Отредактировано VIRTOK (Окт. 10, 2018 16:01:58)

Прикреплённый файлы:
attachment Crypto_test.zip (831 байт)

Офлайн

#2 Окт. 10, 2018 16:40:12

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9903
Репутация: +  855  -
Профиль   Отправить e-mail  

Шифрование пароля в файле конфигурации ini

VIRTOK
пароль должен безопасно хранится в файле config.ini но из файла конфигурации программа должна его подхватывать не в зашифрованном виде
Поставь пакет pycrypto (через pip3 ставится), там есть алгоритм AES для крепкого шифрования. Так шифруешь пароль, потом через модуль base64 кодируешь его в текстовый вид и сохраняешь в ini-файле. Для обратной процедуры читаешь зашифрованный пароль в формате base64, раскодируешь из base64, расшифровываешь из AES. Пароль для AES можешь хранить в программе или брать по сети.



Отредактировано py.user.next (Окт. 10, 2018 16:41:14)

Офлайн

#3 Окт. 10, 2018 17:48:09

VIRTOK
Зарегистрирован: 2017-10-23
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Шифрование пароля в файле конфигурации ini

Если не затруднит прошу привести пример кода
все что я на данный момент сообразил

 import hashlib
h = hashlib.md5(b"password")
p = h.hexdigest()
print(p)

Отредактировано VIRTOK (Окт. 10, 2018 17:50:29)

Офлайн

#4 Окт. 10, 2018 20:18:02

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2763
Репутация: +  185  -
Профиль   Отправить e-mail  

Шифрование пароля в файле конфигурации ini

> Пароль для AES можешь хранить в программе или брать по сети.

Вот только такое хранение пароля мало чем отличается от хранения в открытом виде. Нужно пользоваться специализированными службами хранения паролей. https://github.com/jaraco/keyring



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#5 Окт. 10, 2018 20:51:14

VIRTOK
Зарегистрирован: 2017-10-23
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Шифрование пароля в файле конфигурации ini

возможно нужно будет зашифровать хранящиеся пароли дргим паролем который не хранить в конфигурационном файле ?

Офлайн

#6 Окт. 11, 2018 00:16:32

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9903
Репутация: +  855  -
Профиль   Отправить e-mail  

Шифрование пароля в файле конфигурации ini

VIRTOK
Если не затруднит прошу привести пример кода
С одной из своих программ взял класс
  
>>> import Crypto.Cipher.AES
>>> import base64
>>> 
>>> class AESCryptor:
...     
...     """Simple encryptor/decryptor in aes-ecb mode"""
...     
...     def __init__(self):
...         pass
...     
...     @staticmethod
...     def _align(b, n):
...         """Align byte sequence by zeros to blocks of some length."""
...         if len(b) == n:
...             return b
...         else:
...             return b + bytes(n - len(b) % n)
...     
...     def encrypt(self, s, p):
...         """Encrypt plain string with password."""
...         bs = s.encode('utf-8')
...         bp = p.encode('utf-8')
...         c = Crypto.Cipher.AES.new(self._align(bp, 16))
...         be = c.encrypt(self._align(bs, 16))
...         e = be.decode('latin1')
...         return e
...     
...     def decrypt(self, s, p):
...         """Decrypt crypted string with password."""
...         bs = s.encode('latin1')
...         bp = p.encode('utf-8')
...         c = Crypto.Cipher.AES.new(self._align(bp, 16))
...         bd = c.decrypt(bs)
...         d = bd.rstrip(b'\x00').decode('utf-8')
...         return d
... 
>>> cryptor = AESCryptor()
>>> cryptor.encrypt('text', 'password')
'èB\x83\x1c\x8a¢¬ÒöeZÏÌr'
>>> cryptor.decrypt('èB\x83\x1c\x8a¢¬ÒöeZÏÌr', 'password')
'text'
>>> 
>>> edata = cryptor.encrypt('text', 'password')
>>> edata
'èB\x83\x1c\x8a¢¬ÒöeZÏÌr'
>>> base64.b64encode(edata.encode('latin1'))
b'6EKDHEisiqKs0vZlWs/Mcg=='
>>> base64.b64decode(b'6EKDHEisiqKs0vZlWs/Mcg==')
b'\xe8B\x83\x1cH\xac\x8a\xa2\xac\xd2\xf6eZ\xcf\xccr'
>>> base64.b64decode(b'6EKDHEisiqKs0vZlWs/Mcg==').decode('latin1')
'èB\x83\x1c\x8a¢¬ÒöeZÏÌr'
>>> cryptor.decrypt('èB\x83\x1c\x8a¢¬ÒöeZÏÌr', 'password')
'text'
>>>


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



Отредактировано py.user.next (Окт. 11, 2018 00:24:50)

Офлайн

#7 Окт. 11, 2018 10:49:38

VIRTOK
Зарегистрирован: 2017-10-23
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Шифрование пароля в файле конфигурации ini

Прошу комментировать строчки , принцип ясен , но есть пробелы

 cryptor.encrypt('text', 'password')
'èB\x83\x1c\x8a¢¬ÒöeZÏÌr'
>>> cryptor.decrypt('èB\x83\x1c\x8a¢¬ÒöeZÏÌr', 'password')
'text'
>>> 
>>> edata = cryptor.encrypt('text', 'password')
>>> edata
'èB\x83\x1c\x8a¢¬ÒöeZÏÌr'
>>> base64.b64encode(edata.encode('latin1'))
b'6EKDHEisiqKs0vZlWs/Mcg=='
>>> base64.b64decode(b'6EKDHEisiqKs0vZlWs/Mcg==')
b'\xe8B\x83\x1cH\xac\x8a\xa2\xac\xd2\xf6eZ\xcf\xccr'
>>> base64.b64decode(b'6EKDHEisiqKs0vZlWs/Mcg==').decode('latin1')
'èB\x83\x1c\x8a¢¬ÒöeZÏÌr'
>>> cryptor.decrypt('èB\x83\x1c\x8a¢¬ÒöeZÏÌr', 'password')
'text'

Офлайн

#8 Окт. 11, 2018 10:58:30

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Шифрование пароля в файле конфигурации ini

VIRTOK
вы так и не поняли… можно как угодно фифровать. Вопрос в том как расшифровать - кто то должен иметь ключ. Либо пользователь, либо программа.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#9 Окт. 11, 2018 11:14:49

VIRTOK
Зарегистрирован: 2017-10-23
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Шифрование пароля в файле конфигурации ini

1.Мне надо защитить информацию от обывателя , что бы поле с паролем в конфиге не читалось
2. Желательно использовать главный пароль который будет расшифровывать остальные, я его буду вводить и тогда пароли из конфигов будут использоваться
3. Прошу привести пример кода если не вас не затруднит

Офлайн

#10 Окт. 11, 2018 11:47:12

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2763
Репутация: +  185  -
Профиль   Отправить e-mail  

Шифрование пароля в файле конфигурации ini

> Кошелёк с паролями в системе тоже легко прослушивается.

Ну это уже от системы зависит.

> Можно пароль хранить в конфиге, который закрыт на доступ. Программа может брать пароль из этого конфига через какой-нибудь механизм тонкого доступа к файлу.

Если злоумышленник получил доступ к конфигу с шифрованными паролями, то скорее всего он получит доступ и к самой программе. А достать от туда пароль или понять от куда он берёться не составляет труда.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version