Найти - Пользователи
Полная версия: Задача для питона по крипографии.
Начало » Python для новичков » Задача для питона по крипографии.
1 2
Аня
Ferroman
напишите, пожалуйста, как выглядит на питоне sign(M, k)
как определить функцию? что она будет возвращать?
Ferroman
я могу воспользоваться чем угодно)))мне просто надо получить правильный ответ)
Просто воспользуйтесь тем что есть по 9-й ссылке.
Аня
Спасибо всем!вроде все получилось)
Аня
если кому интересно - вот код:
M=924743079237129051644739152484
p=999322873936262740684006202459
g=140405385067992828921334150816
x=597374340137088807238685974246
k=224303606516544629816282457677
a=pow(g, k, p)

def xgcd(a, b):
if a == 0 and b == 0: return (0, 0, 1)
if a == 0: return (abs(b), 0, b/abs(b))
if b == 0: return (abs(a), a/abs(a), 0)
x_sign = 1; y_sign = 1
if a < 0: a = -a; x_sign = -1
if b < 0: b = -b; y_sign = -1
x = 1; y = 0; r = 0; s = 1
while b != 0:
(c, q) = (a%b, a/b)
(a, b, r, s, x, y) = (b, c, x-q*r, y-q*s, r, s)
return (a, x*x_sign, y*y_sign)

kinv=xgcd(k,p-1)[1]%(p-1)
b=((M-x*a)*kinv)%(p-1)
y=pow(g, x, p)
isk=pow(g, M, p)
isk1=(pow(y, a, p)*pow(a, b, p))%p

print (isk-isk1)
print a
print b

M1=423582294813879697636834497552
p1=999322873936262740684006202459
g1=140405385067992828921334150816
y=937020276605545547319398743394
a1=985798159078111620103163777903
b1=992544085004248013500440387192
iskom=pow(g, M1, p)
iskom1=(pow(y, a1, p)*pow(a1, b1, p))%(p)
print (iskom-iskom1)
shiza
офигеть можно %)
круто!
а что означает третий аргумент в функции pow ?
Андрей Светлов
если указан - возвращается остаток от деления по модулю. Параметр - этот самый модуль
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB