ho una password che è cifrare da JavaScript tramiteCome per decriptare la password da JavaScript CryptoJS.AES.encrypt (password, password) in Python
var password = 'sample'
var passphrase ='sample_passphrase'
CryptoJS.AES.encrypt(password, passphrase)
Poi ho cercato di decifrare la password viene da JavaScript in Python :
from Crypto.Cipher import AES
import base64
PADDING = '\0'
pad_it = lambda s: s+(16 - len(s)%16)*PADDING
key = 'sample_passphrase'
iv='11.0.0.101' #------> here is my question, how can I get this iv to restore password, what should I put here?
key=pad_it(key) #------> should I add padding to keys and iv?
iv=pad_it(iv) ##
source = 'sample'
generator = AES.new(key, AES.MODE_CFB,iv)
crypt = generator.encrypt(pad_it(source))
cryptedStr = base64.b64encode(crypt)
print cryptedStr
generator = AES.new(key, AES.MODE_CBC,iv)
recovery = generator.decrypt(crypt)
print recovery.rstrip(PADDING)
ho controllato JS dalla console del browser, mostra IV in CryptoJS.AES.encrypt(password, passphrase)
è un oggetto con alcuni attributi (come sigBytes:16, words: [-44073646, -1300128421, 1939444916, 881316061]
). Sembra generato casualmente.
da una pagina web, mi dice che JS ha due modi per crittografare la password (reference link):
- a.
crypto.createCipher(algorithm, password)
- b.
crypto.createCipheriv(algorithm, key, iv)
Quello che ho visto in JavaScript dovrebbe essere l'opzione a. Tuttavia, solo l'opzione b è equivalente a AES.new() in python.
Le domande sono:
Come posso ripristinare la password in Python senza modificare il codice JavaScript?
Se ho bisogno di IV in Python, come posso ottenerlo dalla password utilizzata in JavaScript?
CryptoJS AES ha come impostazione predefinita la modalità CBC, quindi non è necessaria la modalità CBF in python. AES.encrypt restituisce anche un oggetto. con toString() si ottiene un blob con codifica Base64 contenente sale, iv e message. Tutti loro hanno bisogno di separare il feed finale in Python. Inoltre, tieni presente che la password e la chiave sono due cose diverse. – SKR
Grazie, basta modificare la chiave in sample_passphrase, quindi sarà più chiaro. ma cosa succede se non riesco a ottenere l'output toString()? È diventato un lavoro impossibile? @SKR – Bing
quindi vuoi dire che non hai alcun controllo su tutto il js? Come continua il codice js? cosa succede con l'oggetto restituito da criptare? Hai bisogno di ottenere il sale e iv fuori dal js in qualche modo. O vuoi semplicemente "deridere" il comportamento di js e generare un messaggio crittografato simile per una API esterna o qualcosa del genere? – SKR