0

Hallo, Ich habe mich gefragt, ob jemand mir mit dem folgende Verfahren helfen kann, AhornRSA-Verfahren Kryptologie

Das Protokoll der RSA-Entschlüsselung/Verschlüsselungsverfahren unter Verwendung von unten ist und die Frage, ich versuche unten danach mit meinem Versuch, um zu versuchen, es, ich werde jede Hilfe schätzen. Dank

enter image description here

meine aktuelle Versuch ist die folgende

rsa := proc (key::rsakey, msg::(list(rsascii))) 
local ct, pe, pm, i; 
pm := 26271227347; 
pe := key[2]; 
ct := []; 
for i to nops(msg) do ct := [op(ct), `mod`(message[i]^pe, pm)] 
end do; 
RETURN(ct) 
end proc; 

war die Ahorn Webseite verwenden

+0

und ...? gibt es ein Problem? –

+0

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

+0

Ein öffentlicher Schlüssel dieses kleine erlaubt nur ASCII-Nachrichten von 3 Zeichen. –

Antwort

1

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" 
+0

Wenn Sie 2D Math (setzen) Eingabemodus verwenden, dann stellen Sie sicher, dass es keinen zusätzlichen Abstand zwischen 'rsa' und der öffnenden Klammer' ('Wenn Sie es wie' rsa (...) 'nennen, wird es mit einem zusätzlichen Leerzeichen als Multiplikation geparst. – acer

+0

Hallo, ich habe komplett vergessen, d zu berechnen, danke dafür, und für die Entschlüsselung der Nachrichten um ein Zeichen zu einer Zeit, die zu viel Zeit dauern würde, stattdessen habe ich stattdessen block1: = rsa ([n, d ], [erste zu entschlüsselnde Nummer, zweite, dritte und so weiter]); können Sie mir erklären, was ct: = map (proc (u) Optionen Operator, Pfeil; 'mod' (' &^'(u, pe), pm) end proc, msg) macht seine ruhige Einschüchterung haha ​​ – Gibberish

+0

Versuchen Sie herauszufinden, ob der Kandidat "d" korrekt ist. Sie haben keinen wesentlichen Teil der verschlüsselten Nachricht geliefert, also müssen Sie uns wissen lassen, wie es läuft ... – acer