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