Calcolo il prodotto di np aggiungendo 1 ai due coefficienti: Questo mi consentirà di identificare il campo
NOTA: L'aggiunta di 1 ai due coefficienti è fondamentale. Senza questa aggiunta verrebbe restituito il valore zero
Creo la chiave C.
Identifico L'intervallo dove GC57 può fattorizzare senza implementare.
La parentesi quadra indica la parte intera della divisione.
Per praticità useremo B maiuscolo per indicare il coefficiente bEs1
e I maiuscolo per indicare il campo
Seleziona un numero a caso all'interno di I, sia per j1 che per j2
Individuiamo due numeri primi
Moltiplichiamo tra di loro i due numeri primi trovati p e q e otterremo il semiprimo
Calcolo il semiprimo S
Applico la proprietà "C" del GC57 e restituirà il Fattore p
7637116 = 1339231440512020340072258504092954549323815316786608252418261169326660703929921
87621122 = 54624996571261482756239098007192320213090196007624739699729344668072147955685488879704701119224902073234626482044798624979760473721
C=54624996571261482756239098007192320213090196007624739699729344668072147955685488879704701119224902073234626482044798624979760473720
I= 407883170293381365060413251688546614204855537816350940
j1= 5656171694508193853299866782255934393526915800518732
j2= 29219278825175008343630905512310813466943190786662532
S=73155512846094687489036515685517466932714366370595924966435044057244684100831976531373532919311462931621061674766168335705072773833025416280948061110023418176703652355979144276396326990410631472467883833317209
Numeri primi trovati con MCD(S,S mod C)
p=1339231440512020340072258509749126243832009170086475034674195562853576504448653
q=54624996571261482756239098007192320213090196007624739699729344668072147955685518098983526294233245704140138792858265568170547136253
# * GC57 test contenitore chiave 1
from math import gcd,log
from random import randint, seed
import time
from gmpy2 import next_prime as nprime
from gmpy2 import is_prime as iprime
# **** imposto il seme di ricerca random
T=int(time.time())
seed(T)
# definisco il ciclo di ripetizione per entrambi i cicli inseriti
rip=1
# **** imposto due numeri primi
ps = 76371
qs = 876211
# **** imposto gli esponenti
p=ps**16
q=qs**22
# **** Calcolo la chiave e l'intervallo
print("---------------------------------------------------------------------")
# chiave=q-1
nn=(p+1)*(q+1)
#esp = int(log(nn, qs)) // 2
#chiave = qs**esp
chiave = q - 1
print("chiave =",chiave)
campo=(chiave//(((p+1)*(q+1))%chiave))*2
print("campo =",campo)
print("base p =",p)
print("base q =", q)
# **** Imposto variabili progressione
pc=p*q//campo
v1=0
v2=v1+1
# **** identifico il numero primo
for i in range(rip):
trovato=0
p_campo = randint(campo*v1, campo*v2)
q_campo = randint(campo*v1, campo*v2)
n1 =nprime (p + p_campo)
n2= nprime(q + q_campo)
n=n1*n2
for k in range(rip):
r=gcd(n,(n%chiave)+chiave*v1)
if r!=1:
print("---------------------------------------------------------------------")
print()
print("divisore 1 : ", r," ",iprime(r))
print("divisore 2 : ", n//r," ",iprime(n//r))
print("contenitore k : ", i)
print("contenitore v1 : ",v1)
print()
print("X =",n1-p)
print("Y =",n2-q)
print()
print("Numero composto analizzato: ",n)
print("Controanalisi numero composto: ",r*(n//r))
print()
trovato=1
break
if trovato==0:
print("attenzione: nessun divisore trovato per il contenitore :",v1)
break
v1+=1
v2+=1