Лабораторная № 4, Цифровая подпись.

May 18, 2010 16:01


# -*- coding: cp1251 -*-

import sys, hmac, base64, hashlib, getpass, locale
locale.setlocale(locale.LC_ALL, '')

if sys.argv[1] != '-c':
    """
    Подписывает файл с приминением хэша и пароля.
    """
    try:
        testOpen = open(sys.argv[1],'a+')
        if testOpen == '':
            raise IOError
        testOpen.write('\n')
    except IOError:
        print 'Файл не найден или пустой.'
    finally:
        testOpen.close()

password = getpass.getpass('Password: ')
    userSign = hmac.new(password)
    strLine = []
    try:
        for strTxt in open(sys.argv[1], 'r'):
            userSign.update(strTxt)
    except IOError:
        print "Файл не найден или не существет."

hmacFile = base64.b64encode(userSign.digest())

try:
        signFile = open(sys.argv[1], 'a')
        signFile.write(hmacFile)
    except:
        print 'Файл не найден или защищен от записи.'
    finally:
        signFile.close()

if sys.argv[1] == '-c':
    """
    Проверяет подлинность подписи по хэшу файла и паролю.
    """
    try:
        testOpen = open(sys.argv[2],'r')
        if testOpen == '':
            raise IOError
    except IOError:
        print 'Файл не найден или пустой.'
    finally:
        testOpen.close()

password = getpass.getpass('Password: ')
    userSign = hmac.new(password)

fLines = []

for lines in open(sys.argv[2],'r'):
        fLines.append(lines)

for i in fLines[:len(fLines)-1]:
        userSign.update(i)

hmacFile = base64.b64encode(userSign.digest())

if hmacFile == fLines[len(fLines)-1]:
        print 'Подпись верна.'
    else:
        print 'Неверный пароль или цифровая подпись повреждена.'

lab #04, python

Previous post
Up