tôi đã được trao các thuật toán sau đó tính là nơi s = g^u mod p bằng Python:tính toán modulo nhanh bằng Python và Ruby
def modexp (g, u, p):
"""computes s = (g^u) mod p
args are base, exponent, modulus
(see Bruce Schneier's book, _Applied Cryptography_ p. 244)"""
s = 1
while u != 0:
if u & 1:
s = (s * g)%p
u >>= 1
g = (g * g)%p;
return s
Tuy nhiên, khi tôi chuyển đổi mã Ruby như vậy :
def modexp (g, u, p)
s = 1
while u != 0
if u & 1
s = (s * g)%p
end
u >>= 1
g = (g * g)%p
end
return s
end
Tôi nhận được kết quả khác nhau. Ví dụ:
Python 2.7 (r27:82500, Oct 6 2010, 12:29:13)
[GCC 4.5.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import modexp
>>> modexp.modexp(96,25,17)
6
Đó là câu trả lời đúng từ mã Python so với
>> require './modexp.rb'
=> true
>> modexp(96,25,17)
=> 14
bất cứ ai có thể giải thích điều này? Từ những gì tôi đã đọc Python và Ruby có cú pháp tương tự cho bithift và bitwise và được sử dụng trong mã, vì vậy tôi không nghĩ rằng đó là. Bất cứ ai có ý tưởng nào khác?
Tại sao bạn không gỡ lỗi mã để tìm dòng nơi giá trị khác nhau? –