Sie haben n
und e
gegeben worden, und Sie werden feststellen müssen die entsprechenden d
bevor Sie entschlüsseln können. Ich verstehe nicht, warum Sie versuchen, e
zu verwenden, um zu decodieren.
Ihre Prozedur enthält mindestens einen Typ mit message[i]
anstelle von msg[i]
. Siehe auch die Kommentare im folgenden Code.
Nachdem ich d
gefunden habe, bekomme ich, dass die codierte Ganzzahl 11393739244 zu der Ganzzahl 87 decodiert, die dem ASCII-Zeichen "W" entspricht (nicht "wha" oder "Wha" wie Sie vorgeschlagen).
Ich verstehe nicht, was Sie vorhaben über Blockgröße zu tun, und so musste ich erraten. Im Folgenden zeige ich die Kodierung/Entschlüsselung entweder A) ein Zeichen zu einer Zeit, oder B) mit drei Zeichen gleichzeitig. Ich hoffe, Ihnen ist klar, dass die Kodierung von Zeichen zu Zeichen keine gute Idee ist. Außerdem hast du in einem Duplikat in einem anderen Forum geschrieben, dass dir Sicherheit gegen Angriffe egal ist. (Sie haben auch geschrieben, dass dies keine Hausaufgaben sind, aber hier sieht es mehr aus, IMO.)
Wenn Sie Schwierigkeiten beim Schreiben und Verwenden Ihrer rsa
Prozedur hatten, dann können Sie die verschiedenen Splitting/Concetening/Padding-Operationen schwierig finden ebenfalls.
Sie schrieb in einem Kommentar, dass, wenn Sie versuchten, Ihren ersten Versuch bei der Prozedur rsa
dann verwenden, "es gibt nichts zurück". Wenn es als unbewerteter Aufruf zurückgegeben wurde, hat Ihr Versuch, den Prozess zu erstellen und ihn zuzuweisen, möglicherweise nicht funktioniert. Wenn Sie Probleme haben, den Standard-2D-Eingabemodus von Maple in einem Dokument zu verwenden, dann sollten Sie Ihre Einstellungen auf die 1D Maple Notation-Eingabe in einem Arbeitsblatt umstellen. Das sind zwei Einstellungen für Maple's Standard Java GUI.
NB. Ich benutze Maple's numtheory[lambda]
Befehl, um "die kleinste ganze Zahl i zu finden, so dass für alle g Koprime zu n, g^i kongruent zu 1 modulo n" ist. In aktuellen Maple-Versionen ist dies auch als Befehl NumberThoery:-CarmichaelLambda
verfügbar. Siehe auch here.
restart;
# The procedure `rsa` below can be used to both encode or
# decode an integer.
#
# Conversion from/to ASCII is done separately, before/after.
rsa := proc(key::list(posint), msg::list(posint))
local ct, pe, pm, i;
pm := key[1];
pe := key[2];
## The original used `message` instead of `msg`, which was
## a careless typo. But iterated list concatenation like this
## is inefficient. Better to just use `seq`, as below.
## Also, use inert `&^` instead of `^` in the call to `mod`
## since the latter inefficiently computes the power
## explicitly (before taking the modulus).
#ct := [];
# for i to nops(msg) do ct := [op(ct), `mod`(msg[i] &^ pe, pm)]
#end do;
ct := map(u->`mod`(u &^ pe, pm), msg);
return ct;
end proc:
# You supplied (n,e) and you'll need to find d in order to decode.
n:=26271227347;
n := 26271227347
L := numtheory[lambda](n);
L := 13135445468
e:=11546465;
e := 11546465
evalb(e < L); # a requirement
true
evalb(gcd(e, L) = 1); # a requirement
true
d := 1/e mod L;
d := 7567915453
# Now decode the number you supplied.
res := rsa([n,d],[11393739244]);
res := [87]
with(StringTools):
# So what ASCII character is that?
convert(res,bytes);
"W"
s := "Wha":
sb := map(convert,convert(s,bytes),string);
sb := ["87", "104", "97"]
sbn := map(parse,sb);
sbn := [87, 104, 97]
encoded := rsa([n,e],sbn);
encoded := [11393739244, 9911682959, 21087186892]
decoded := rsa([n,d],encoded);
decoded := [87, 104, 97]
pad := proc(str::string)
local r;
r := irem(length(str),3);
cat(seq("0",i=1..`if`(r=0,0,3-r)), str);
end proc:
map(pad, map(convert,decoded,string));
["087", "104", "097"]
cat(op(map(u->convert(map(parse,[LengthSplit(convert(u,string),3)]),
bytes), %)));
"Wha"
newsb := [cat(op(map(SubstituteAll,map(PadLeft,sb,3)," ","0")))];
newsb := ["087104097"]
newsbn := map(parse,newsb);
newsbn := [87104097]
encoded := rsa([n,e],newsbn);
encoded := [15987098394]
decoded := rsa([n,d],%);
decoded := [87104097]
map(pad, map(convert,decoded,string));
["087104097"]
cat(op(map(u->convert(map(parse,[LengthSplit(convert(u,string),3)]),
bytes), %)));
"Wha"
und ...? gibt es ein Problem? –
Ja, es läuft, aber wenn ich versuche, mit dem öffentlichen Schlüssel und ein wenig der Chiffre Text, der in ASCII ist zu bewerten gibt es nichts zurück – Gibberish
Ein öffentlicher Schlüssel dieses kleine erlaubt nur ASCII-Nachrichten von 3 Zeichen. –