Version: 5. félév

11. Gyakorlat

4. feladat#

Írjon SSS_secret_parts(required_num_of_people, num_of_people, secret) szignatúrával függvényt, amely a secret titokból num_of_people db titokrészletet készít, ahol a minimum szükséges részletek száma required_num_of_people. A függvény véletlenszeren válasszon ki egy alkalmas polinomot és prímszámot. A prímszám legyen kellően távol a titoktól (a függvény adja eredményül azt is, melyik prímszám lett kiválasztva).

randint(1, 5) # 1
def SSS_secret_parts(required_num_of_people, num_of_people, secret):
primenum = next_prime(max(secret, num_of_people) + 100*randint(1, secret))
coeff = [1] + [randint(1, primenum) for i in [1..required_num_of_people-2]]
secret_pieces = SSS_secret_pieces_from_primenum_and_coeffs(num_of_people, secret, primenum, coeff)
return primenum, secret_pieces
SSS_secret_parts(3, 4, 5)
#(107, [(1, 45), (2, 87), (3, 24), (4, 70)])
SSS_compute_secret(37, [(2, 20), (3, 12), (4, 6)]) #
SSS_compute_secret(37, [(2, 33), (3, 3)]) # 19
SSS_secret_parts(7, 10, 5235325)
(127763641, [(1, 88804770), (2, 77355777), (3, 62854632), (4, 42675506), (5, 39798294), (6, 95243533), (7, 4980758), (8, 78946706), (9, 111373266), (10, 12043482)])
SSS_compute_secret(31453361, [(1, 1925876), (2, 416898), (3, 25671155), (4, 8697475), (5, 29953391), (6, 28041365), (7, 11659508)])
# 5235325
SSS_compute_secret(31453361, [(1, 1925876), (3, 25671155), (4, 8697475), (5, 29953391), (6, 28041365), (7, 11659508)])
# 5232805

5. feladat#

A 34fg__#Gfb34226fdsWWQl36lII234i<!%fGZjsdJFEBD77467effO+36{}__IOQsFF&363&ZzOO053 jelszóhoz készítsen titokrészleteket, amelyet 10 ember között osztunk szét úgy, hogy legalább 7 ember szükséges legyen az eredeti jelszó előállításához. Adott 7 titokrészletből állítsa elő az eredeti jelszót.

# 16-os számrendszer: 0, 1, ..., 9, A=10, B=11, C, D, E, F
# 1A = A * 16^0 + 1*16^1
ord('A') # 65
ord('a') # 97
src = list("34fg__#Gfb34226fdsWWQl36lII234i<!%fGZjsdJFEBD77467effO+36{}__IOQsFF&363&ZzOO053")
#src = "alma"
result = 0
i = 0
src.reverse()
print(src)
for ch in src:
#print(ord(ch))
result += ord(ch)*256^i
i += 1
print(result)
# ['3', '5', '0', 'O', 'O', 'z', 'Z', '&', '3', '6', '3', '&', 'F', 'F', 's', 'Q', 'O', 'I', '_', '_', '}', '{', '6', '3', '+', 'O', 'f', 'f', 'e', '7', '6', '4', '7', '7', 'D', 'B', 'E', 'F', 'J', 'd', 's', 'j', 'Z', 'G', 'f', '%', '!', '<', 'i', '4', '3', '2', 'I', 'I', 'l', '6', '3', 'l', 'Q', 'W', 'W', 's', 'd', 'f', '6', '2', '2', '4', '3', 'b', 'f', 'G', '#', '_', '_', 'g', 'f', '4', '3']
# 3564733067735719071646687286191003377609878724686405481337882898389016373456046506323076878927861827176786281900611822489011829592155079319045973686683531183534466558164788076421842157450547
num = 85942000775441864767076
L = list()
while num > 0:
L.append(chr(num % 128))
num //= 128
print(L)
# ['d', 'l', 'r', 'o', 'w', ' ', 'o', 'l', 'l', 'e', 'H']
chr(65)
# A
Last updated on