Re: Can not decipher BASE64(AES256()) data from web
Posted: Thu Mar 13, 2014 7:17 am
I had to do this for a project recently, here is a PHP code that produces a 256bit AES CBC ciphered text (purified with Base64 to be printable) and the PureBasic code that reads and deciphers the encryption. If you don't have PHP to test with, you can load the PHP page in your browser from here: http://lloydsplace.com/encrypt.php and copy/paste the ciphered string to the PB code:
PHP
PureBasic
PHP
Code: Select all
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>Untitled 1</title>
</head>
<body>
<?php
/* Open the cipher */
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
// Create the IV and determine the keysize length
$iv = 'always6teenbytes';
// Create key: 16 bytes for 128bit strength, 24 for 192, 32 for 256
$key = substr(md5('secretpassword'), 0, 32);
/* Intialize encryption */
mcrypt_generic_init($td, $key, $iv);
/* Encrypt data */
$bb = mcrypt_generic($td, 'Some remarkably sensitive data...');
$encrypted = base64_encode($bb);
/* Terminate encryption handler */
mcrypt_generic_deinit($td);
/* Initialize encryption module for decryption */
mcrypt_generic_init($td, $key, $iv);
/* Decrypt encrypted string */
$decrypted = mdecrypt_generic($td, base64_decode($encrypted));
/* Terminate decryption handle and close module */
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
/* Show string */
echo $key . "<br>";
echo $encrypted . "<br>";
echo trim($decrypted) . "\n";
?>
</body>
</html>
Code: Select all
pwd$ = "secretpassword"
key$ = Left(MD5Fingerprint(@pwd$, StringByteLength(pwd$)), 32) ; it's 32 bytes anyway, only reason for Left() is for smaller key sizes
iv$ = "always6teenbytes" ; iv is always 16 bytes for AES
OpenWindow(0, 0, 0, 540, 100, "DECRYPT CIPHER", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
TextGadget(0, 15, 23, 50, 20, " Cipher:")
StringGadget(1, 60, 20, 460, 20, "")
TextGadget(2, 15, 58, 50, 20, "Plaintext:")
StringGadget(3, 60, 55, 320, 20, "")
ButtonGadget(4, 385, 55, 40, 20, "copy")
SetActiveGadget(1)
Repeat
ev=WaitWindowEvent()
Select ev
Case #PB_Event_Gadget
Select EventGadget()
Case 1
If EventType() = #PB_EventType_Change
encrypted$ = GetGadgetText(1)
*enc = @encrypted$
; decode base 64 first
*unbase = AllocateMemory(StringByteLength(encrypted$))
size = Base64Decoder(*enc, MemorySize(*unbase), *unbase, MemorySize(*unbase))
; now decode AES encryption
If size < 16 : size = 16 : EndIf
*decrypt = AllocateMemory(size)
AESDecoder(*unbase, *decrypt, size, @key$, 256, @iv$, #PB_Cipher_CBC)
SetGadgetText(3, PeekS(*decrypt))
SendMessage_(GadgetID(3), #EM_SETSEL, 0, -1)
SetActiveGadget(3)
ElseIf EventType() = #PB_EventType_Focus
SendMessage_(GadgetID(1), #EM_SETSEL, 0, -1)
EndIf
Case 4
SetClipboardText(GetGadgetText(3))
EndSelect
EndSelect
Until ev=#PB_Event_CloseWindow