Ik ben via een aantal puzzelsites al een paar keer uitgekomen op RSA encryptie. Nou heb ik me daarin verdiept en vind het eigenlijk best wel interessant. Verscheidene sites doorgelezen vol met formules, vergelijkingen en bewijsvoeringen.
Toen wilde ik zelf wel eens proberen of ik een dergelijke encryptie kon schrijven. Aangezien ik hier op stage geen C++Builder of JBuilder tot m'n beschikking heb, ben ik maar in php begonnen, wat natuurlijk mogelijk moet zijn, alhoewel enorme getallen niet echt fijn zijn voor deze webtaal. Dat terzijde gelaten moet het iig lukken voor getallen van redelijke omvang.
Ik gebruik, om te testen of ik het goed doe, deze site: Deze dus. Hier wordt vrij uitgebreid uitgelegd hoe het in z'n werk gaat.
Als test, werk ik dan ook met het woord WHATEVER van die site, waar ik de daar gegeven formules op los laat. Bij de eerste letter krijg ik echter al een andere uitkomst dan bedoeld.
Als ik op pagina 2 van de site kijk, hebben ze daar een scriptje van de encryptie / decryptie uitvoert. Daarin wordt de letter W (letternummer 23) gecodeerd naar naar nummer 948 volgens de formule y = x^r (mod n). In deze formule weet ik:
x = 23
r = 25
p = 29
q = 37
n = p * q = 1073
Ik bereken dan dus:
y = 23^25 (mod 1073), wat zoveel betekent als dat y en 23^25 (23 tot de macht 25) bij een deling door 1073 dezelfde rest over houden. Daarbij kom ik voor y op een waarde van 761.
Daar klopt dus ergens iets niet. Ik vermoed dat mijn fout in de implementatie van de modulo zit, maar hoe ik deze precies zou moeten veranderen kan ik niet vinden. Ik heb een aantal sites en wiskunde fora er op nageslagen, maar vind daar helaas geen antwoord waarmee dit opgelost is. Waar zit 'm de fout, zodat ik _wel_ op 948 uitkom?
Hier is m'n (foutieve) stukje code voor het encrypten van die letter:
Toen wilde ik zelf wel eens proberen of ik een dergelijke encryptie kon schrijven. Aangezien ik hier op stage geen C++Builder of JBuilder tot m'n beschikking heb, ben ik maar in php begonnen, wat natuurlijk mogelijk moet zijn, alhoewel enorme getallen niet echt fijn zijn voor deze webtaal. Dat terzijde gelaten moet het iig lukken voor getallen van redelijke omvang.
Ik gebruik, om te testen of ik het goed doe, deze site: Deze dus. Hier wordt vrij uitgebreid uitgelegd hoe het in z'n werk gaat.
Als test, werk ik dan ook met het woord WHATEVER van die site, waar ik de daar gegeven formules op los laat. Bij de eerste letter krijg ik echter al een andere uitkomst dan bedoeld.
Als ik op pagina 2 van de site kijk, hebben ze daar een scriptje van de encryptie / decryptie uitvoert. Daarin wordt de letter W (letternummer 23) gecodeerd naar naar nummer 948 volgens de formule y = x^r (mod n). In deze formule weet ik:
x = 23
r = 25
p = 29
q = 37
n = p * q = 1073
Ik bereken dan dus:
y = 23^25 (mod 1073), wat zoveel betekent als dat y en 23^25 (23 tot de macht 25) bij een deling door 1073 dezelfde rest over houden. Daarbij kom ik voor y op een waarde van 761.
Daar klopt dus ergens iets niet. Ik vermoed dat mijn fout in de implementatie van de modulo zit, maar hoe ik deze precies zou moeten veranderen kan ik niet vinden. Ik heb een aantal sites en wiskunde fora er op nageslagen, maar vind daar helaas geen antwoord waarmee dit opgelost is. Waar zit 'm de fout, zodat ik _wel_ op 948 uitkom?
Hier is m'n (foutieve) stukje code voor het encrypten van die letter:
PHP:
1
| $encrypted = (bcpow($string, $r) % $n); |
[ Voor 5% gewijzigd door Kaastosti op 25-06-2003 10:54 ]
Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.