2016-12-20 5 views
1

I-Studie z/OS und REXX und jetzt haben Code, der öffentliche und private Schlüssel von MY.DATA.SET (öffentlich, privat) nimmt und verschlüsselt die Nachricht (MSG):Verschlüsselung/Entschlüsselung von REXX

"ALLOC FI(pubkey) DA('MY.DATA.SET(PUBLIC)') SHR REUSE" 
"ALLOC FI(prikey) DA('MY.DATA.SET(PRIVATE)') SHR REUSE" 
"ALLOC FI(msgin) DA(‘MY.DATA.SET(MSG)') SHR REUSE" 
"ALLOC FI(msgout) DA(*) SHR REUSE"          
"EXECIO 1 DISKR pubkey (STEM pub. FINIS"         
"EXECIO 1 DISKR prikey (STEM pri. FINIS"         
"EXECIO * DISKR msgin (STEM msg. FINIS"         
"EXECIO 0 DISKW msgout (STEM enc_msg. OPEN"        
enc_msg.1 = pub.1              
"EXECIO 1 DISKW msgout (STEM enc_msg. "         
do i=1 to msg.0              
    do j=1 to length(msg.i)           
    letter.j = substr(msg.i,j,1)          
    encrypt.j = translate(letter.j,pri.1,pub.1)      
    end                
call write_encrypted_line           
end                 
"EXECIO 0 DISKW msgout (FINIS"          
"FREE FI(pubkey)"             
"FREE FI(prikey)"             
"FREE FI(msgin)"              
"FREE FI(msgout)"             
exit 0                
write_encrypted_line:            
charout = ''               
newchar = ''               
    do j=1 to length(msg.i)           
    newchar = encrypt.j            
    charout = charout||newchar          
    end                
enc_msg.1 = charout             
"EXECIO 1 DISKW msgout (STEM enc_msg. "        
return                

Und ich möchte es auf DEsrypting-Code übertragen, die das verschlüsselte Ergebnis von oben verschlüsseln kann (das Ergebnis wird mit dem Namen MSGEN gespeichert), um normalen Text zu verwenden, natürlich mit dem gleichen Schlüsselpaar. Bitte, Hilfe: Was sollte ich in meinem Encode-Code ändern, um es entschlüsseln zu lassen? Die Linie

"ALLOC FI(msgin) DA(‘MY.DATA.SET(MSGEN)') SHR REUSE" 

bereits geändert (MSG-> msgen)

Vielen Dank für jede alle Hilfe und Antwort!

+0

Das scheint eine Hausaufgabe zu sein, ja? Und was hast du bisher versucht, damit es funktioniert? –

+0

Keine Hausaufgaben, sondern eine Aufgabe. Ich habe gelesen über "AES Clear Key - Generieren, Schreiben in CKDS, Verschlüsseln und Entschlüsseln", "AES Secure Key - Generieren, Schreiben in CKDS, Verschlüsseln und Entschlüsseln" und eine Menge über REXX, aber nirgendwo kann ein solches Beispiel finden. – iceloki

+0

Ich denke, zuerst muss ich String löschen enc_msg.1 = pub.1, schreibe ich? Dann, um alle "en" auf "de" zu ändern (wie: write_decrypted_line, dec_msg, usw.) und dann denke ich, dass es notwendig ist, den Block DO-END zu ändern. Ich habe verschiedene Dinge versucht, wie "encrypt.j = substr (msg.i, j, 1) decrypt.j = übersetzen (encrypt.j, pri.1, pub.1)" – iceloki

Antwort

0

Ohne zu wissen, was Ihre Schlüssel sind, denke ich, dass Sie die Schlüssel in Ihrer TRANSLATE-Leitung umkehren müssen.

http://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.ikja300/transl.htm

Here are some examples: 
TRANSLATE('abcdef')     -> 'ABCDEF' 
TRANSLATE('abbc','&','b')    -> 'a&&c' 
TRANSLATE('abcdef','12','ec')   -> 'ab2d1f' 
TRANSLATE('abcdef','12','abcd','.') -> '12..ef' 
TRANSLATE('APQRV',,'PR')    -> 'A Q V' 
TRANSLATE('APQRV',XRANGE('00'X,'Q')) -> 'APQ ' 
TRANSLATE('4123','abcd','1234')  -> 'dabc' 



do i=1 to msg.0              
    do j=1 to length(msg.i)           
    letter.j = substr(msg.i,j,1)          
    decrypt.j = translate(letter.j,pub.1,pri.1)      
    end                
    call write_dencrypted_line           
end 
+0

Vielen Dank !!! – iceloki

-1

Dies ist von IBM Meister der Mainframe 2016. Es ist das Trainingssystem für den Wettbewerb ist. Der Wettbewerb 2016 ist bereits vorbei mit.

Das Zeug über die Ausgabe der ersten Zeile kann auskommentiert werden. Die I-Variable, die in do i = 2 bis msg.0 höher gesetzt wurde, ist wie meine "2" , um die erste Ausgabezeile zu überspringen.

Der öffentliche Schlüssel ist bereits im MSG-Eingang, so müssen nur - PUB.1 = msg.1

löschen oder ALLOC Kommentar aus, frei und EXECIO für Public Key.

Es funktioniert, wenn Sie das nicht tun, aber es ist keine vollständige Aufgabe.

+0

Bitte kombinieren Sie Ihre zwei Antworten zu einem – lebelinoz

0
/* REXX */                
/******************************************************************/ 
/**                **/ 
/** Get access to private key, public key, and message   **/ 
/**                **/ 
/******************************************************************/ 
"ALLOC FI(prikey) DA('ZOS.PUBLIC.SECRET.MESSAGES(PRIVATE)') SHR REUSE" 
"ALLOC FI(msgin) DA('ZOS.PUBLIC.SECRET.MESSAGES(SECRET)') SHR REUSE" 
/* "ALLOC FI(msgout) DA(*) SHR REUSE" */        
/******************************************************************/ 
/**                **/ 
/** In the DECRYPT REXX routine, upon successful decryption  **/ 
/** of ZOS.PUBLIC.SECRET.MESSAGES(SECRET), uncomment msgout  **/ 
/** ALLOC below and comment the msgout ALLOC above    **/ 
/**                **/ 
/******************************************************************/ 
"ALLOC FI(msgout) DA(P3.OUTPUT(#14)) SHR REUSE"      
/******************************************************************/ 
/**                **/ 
/** Read private key, public key, and message     **/ 
/**                **/ 
/******************************************************************/ 
"EXECIO 1 DISKR prikey (STEM pri. FINIS"        
"EXECIO * DISKR msgin (STEM msg. FINIS"        
pub.1 = msg.1               
/* say msg.1 */              
/******************************************************************/ 
/**                **/ 
/** Parse encrypted message using (REVERSE) private and public **/ 
/** key pair to create decrypted message       **/ 
/**                **/ 
/******************************************************************/ 
do i=2 to msg.0              
    do j=1 to length(msg.i)            
    letter.j = substr(msg.i,j,1)          
    decrypt.j = translate(letter.j,pub.1,pri.1)      
    end                 
call write_decrypted_line            
Verwandte Themen