JS en PHP encryption
Wie kan mij een javascript en/de cryptie scriptje vinden die samenwerkt met php?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
echo '<pre>'.PHP_EOL;
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$key = "This is a very secret key";
$text = "Meet me at 11 o'clock behind the monument.";
var_dump($text);
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv);
var_dump($crypttext);
$newtext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $crypttext, MCRYPT_MODE_ECB, $iv);
var_dump(trim($newtext));
echo '</pre>';
?>
echo '<pre>'.PHP_EOL;
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$key = "This is a very secret key";
$text = "Meet me at 11 o'clock behind the monument.";
var_dump($text);
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv);
var_dump($crypttext);
$newtext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $crypttext, MCRYPT_MODE_ECB, $iv);
var_dump(trim($newtext));
echo '</pre>';
?>
Code (php)
1
2
3
2
3
string(42) "Meet me at 11 o'clock behind the monument."
string(64) ">,RhOJ7iO`z `u$))C;@K&N/"
string(42) "Meet me at 11 o'clock behind the monument."
string(64) ">,RhOJ7iO`z `u$))C;@K&N/"
string(42) "Meet me at 11 o'clock behind the monument."
Gewijzigd op 01/01/1970 01:00:00 door Hipska BE
Je zou in de PHP source moeten kijken hoe mcrypt_encript werkt, dan zou het in principe te doen moeten zijn. Waarom wil je eigenlijk PHP en JavaScript?
om bv te coderen in Javascript en te decoderen in php. maar met de scripts die ik al gevonden heb lukte dat niet.
Het coderen gebeurt aan een kant waar geen PHP ondersteuning is ???
de te coderen text mag niet verstuurd worden over internet, dus is php niet aan te raden..
Hipska schreef op 28.01.2008 21:30:
ja ik weet wel wat ik wil hoor ;)
de te coderen text mag niet verstuurd worden over internet, dus is php niet aan te raden..
de te coderen text mag niet verstuurd worden over internet, dus is php niet aan te raden..
Ah, dus een client-side PHP functie. Tsja, dan zit er inderdaad niets anders op dan bijvoorbeeld de JavaScript variant van Sha1/MD5 te proberen of inderdaad de PHP source te bekoekeloeren.
ik wil met JS kunnen encrypten en met php dat stukje decrypten, niet een hash maken.
Als ik je help, word ik dan AOP?
huh?
Hipska schreef op 28.01.2008 21:30:
ja ik weet wel wat ik wil hoor ;)
de te coderen text mag niet verstuurd worden over internet, dus is php niet aan te raden..
de te coderen text mag niet verstuurd worden over internet, dus is php niet aan te raden..
Hipska schreef op 28.01.2008 21:45:
joehoe lees eens,
ik wil met JS kunnen encrypten en met php dat stukje decrypten, niet een hash maken.
ik wil met JS kunnen encrypten en met php dat stukje decrypten, niet een hash maken.
Ben ik nu zo dom, of klopt er hier iets niet..
Je wilt het met JS (cliënt side) encrypten, omdat de te coderen text niet verstuurd word over internet.
Waarom wil je het dan in 's hemelsnaam wel op de server kunnen decrypten? Zonder het te verzenden, zal het nooit bij de server komen!
en ja ik weet wat ik wil, encrypten met JS en decrypten met php!! (2DE MAAL)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?php
static void php_mcrypt_do_crypt (char* cipher, zval **key, zval **data, char *mode, zval **iv, int argc, int dencrypt, zval* return_value TSRMLS_DC) /* {{{ */
{
char *cipher_dir_string;
char *module_dir_string;
int block_size, max_key_length, use_key_length, i, count, iv_size;
unsigned long int data_size;
int *key_length_sizes;
char *key_s = NULL, *iv_s;
char *data_s;
MCRYPT td;
MCRYPT_GET_INI
td = mcrypt_module_open(cipher, cipher_dir_string, mode, module_dir_string);
if (td == MCRYPT_FAILED) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, MCRYPT_OPEN_MODULE_FAILED);
RETURN_FALSE;
}
/* Checking for key-length */
max_key_length = mcrypt_enc_get_key_size(td);
if (Z_STRLEN_PP(key) > max_key_length) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Size of key is too large for this algorithm");
}
key_length_sizes = mcrypt_enc_get_supported_key_sizes(td, &count);
if (count == 0 && key_length_sizes == NULL) { /* all lengths 1 - k_l_s = OK */
use_key_length = Z_STRLEN_PP(key);
key_s = emalloc(use_key_length);
memset(key_s, 0, use_key_length);
memcpy(key_s, Z_STRVAL_PP(key), use_key_length);
} else if (count == 1) { /* only m_k_l = OK */
key_s = emalloc(key_length_sizes[0]);
memset(key_s, 0, key_length_sizes[0]);
memcpy(key_s, Z_STRVAL_PP(key), MIN(Z_STRLEN_PP(key), key_length_sizes[0]));
use_key_length = key_length_sizes[0];
} else { /* dertermine smallest supported key > length of requested key */
use_key_length = max_key_length; /* start with max key length */
for (i = 0; i < count; i++) {
if (key_length_sizes[i] >= Z_STRLEN_PP(key) &&
key_length_sizes[i] < use_key_length)
{
use_key_length = key_length_sizes[i];
}
}
key_s = emalloc(use_key_length);
memset(key_s, 0, use_key_length);
memcpy(key_s, Z_STRVAL_PP(key), MIN(Z_STRLEN_PP(key), use_key_length));
}
mcrypt_free (key_length_sizes);
/* Check IV */
iv_s = NULL;
iv_size = mcrypt_enc_get_iv_size (td);
if (argc == 5) {
if (iv_size != Z_STRLEN_PP(iv)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, MCRYPT_IV_WRONG_SIZE);
} else {
iv_s = emalloc(iv_size + 1);
memcpy(iv_s, Z_STRVAL_PP(iv), iv_size);
}
} else if (argc == 4) {
if (iv_size != 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Attempt to use an empty IV, which is NOT recommend");
iv_s = emalloc(iv_size + 1);
memset(iv_s, 0, iv_size + 1);
}
}
/* Check blocksize */
if (mcrypt_enc_is_block_mode(td) == 1) { /* It's a block algorithm */
block_size = mcrypt_enc_get_block_size(td);
data_size = (((Z_STRLEN_PP(data) - 1) / block_size) + 1) * block_size;
data_s = emalloc(data_size);
memset(data_s, 0, data_size);
memcpy(data_s, Z_STRVAL_PP(data), Z_STRLEN_PP(data));
} else { /* It's not a block algorithm */
data_size = Z_STRLEN_PP(data);
data_s = emalloc(data_size);
memset(data_s, 0, data_size);
memcpy(data_s, Z_STRVAL_PP(data), Z_STRLEN_PP(data));
}
if (mcrypt_generic_init(td, key_s, use_key_length, iv_s) < 0) {
php_error_docref(NULL TSRMLS_CC, E_RECOVERABLE_ERROR, "Mcrypt initialisation failed");
RETURN_FALSE;
}
if (dencrypt == MCRYPT_ENCRYPT) {
mcrypt_generic(td, data_s, data_size);
} else {
mdecrypt_generic(td, data_s, data_size);
}
RETVAL_STRINGL(data_s, data_size, 1);
/* freeing vars */
mcrypt_generic_end(td);
if (key_s != NULL) {
efree (key_s);
}
if (iv_s != NULL) {
efree (iv_s);
}
efree (data_s);
}
?>
static void php_mcrypt_do_crypt (char* cipher, zval **key, zval **data, char *mode, zval **iv, int argc, int dencrypt, zval* return_value TSRMLS_DC) /* {{{ */
{
char *cipher_dir_string;
char *module_dir_string;
int block_size, max_key_length, use_key_length, i, count, iv_size;
unsigned long int data_size;
int *key_length_sizes;
char *key_s = NULL, *iv_s;
char *data_s;
MCRYPT td;
MCRYPT_GET_INI
td = mcrypt_module_open(cipher, cipher_dir_string, mode, module_dir_string);
if (td == MCRYPT_FAILED) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, MCRYPT_OPEN_MODULE_FAILED);
RETURN_FALSE;
}
/* Checking for key-length */
max_key_length = mcrypt_enc_get_key_size(td);
if (Z_STRLEN_PP(key) > max_key_length) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Size of key is too large for this algorithm");
}
key_length_sizes = mcrypt_enc_get_supported_key_sizes(td, &count);
if (count == 0 && key_length_sizes == NULL) { /* all lengths 1 - k_l_s = OK */
use_key_length = Z_STRLEN_PP(key);
key_s = emalloc(use_key_length);
memset(key_s, 0, use_key_length);
memcpy(key_s, Z_STRVAL_PP(key), use_key_length);
} else if (count == 1) { /* only m_k_l = OK */
key_s = emalloc(key_length_sizes[0]);
memset(key_s, 0, key_length_sizes[0]);
memcpy(key_s, Z_STRVAL_PP(key), MIN(Z_STRLEN_PP(key), key_length_sizes[0]));
use_key_length = key_length_sizes[0];
} else { /* dertermine smallest supported key > length of requested key */
use_key_length = max_key_length; /* start with max key length */
for (i = 0; i < count; i++) {
if (key_length_sizes[i] >= Z_STRLEN_PP(key) &&
key_length_sizes[i] < use_key_length)
{
use_key_length = key_length_sizes[i];
}
}
key_s = emalloc(use_key_length);
memset(key_s, 0, use_key_length);
memcpy(key_s, Z_STRVAL_PP(key), MIN(Z_STRLEN_PP(key), use_key_length));
}
mcrypt_free (key_length_sizes);
/* Check IV */
iv_s = NULL;
iv_size = mcrypt_enc_get_iv_size (td);
if (argc == 5) {
if (iv_size != Z_STRLEN_PP(iv)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, MCRYPT_IV_WRONG_SIZE);
} else {
iv_s = emalloc(iv_size + 1);
memcpy(iv_s, Z_STRVAL_PP(iv), iv_size);
}
} else if (argc == 4) {
if (iv_size != 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Attempt to use an empty IV, which is NOT recommend");
iv_s = emalloc(iv_size + 1);
memset(iv_s, 0, iv_size + 1);
}
}
/* Check blocksize */
if (mcrypt_enc_is_block_mode(td) == 1) { /* It's a block algorithm */
block_size = mcrypt_enc_get_block_size(td);
data_size = (((Z_STRLEN_PP(data) - 1) / block_size) + 1) * block_size;
data_s = emalloc(data_size);
memset(data_s, 0, data_size);
memcpy(data_s, Z_STRVAL_PP(data), Z_STRLEN_PP(data));
} else { /* It's not a block algorithm */
data_size = Z_STRLEN_PP(data);
data_s = emalloc(data_size);
memset(data_s, 0, data_size);
memcpy(data_s, Z_STRVAL_PP(data), Z_STRLEN_PP(data));
}
if (mcrypt_generic_init(td, key_s, use_key_length, iv_s) < 0) {
php_error_docref(NULL TSRMLS_CC, E_RECOVERABLE_ERROR, "Mcrypt initialisation failed");
RETURN_FALSE;
}
if (dencrypt == MCRYPT_ENCRYPT) {
mcrypt_generic(td, data_s, data_size);
} else {
mdecrypt_generic(td, data_s, data_size);
}
RETVAL_STRINGL(data_s, data_size, 1);
/* freeing vars */
mcrypt_generic_end(td);
if (key_s != NULL) {
efree (key_s);
}
if (iv_s != NULL) {
efree (iv_s);
}
efree (data_s);
}
?>
http://www.movable-type.co.uk/scripts/aes.html
-> http://home.versatel.nl/MAvanEverdingen/Code/
Dojo heeft toch ook een implementatie, verstopt in dojox._sql._crypto, maar die is afgeleid van die van Movable Type. Verder vond ik nog een implementatie van Mozilla, geen idee hoe het met de afhankelijkheden zit.
Het resultaat van 10 minuten googelen & zoeken op koders.
-> -> http://home.versatel.nl/MAvanEverdingen/Code/
Dojo heeft toch ook een implementatie, verstopt in dojox._sql._crypto, maar die is afgeleid van die van Movable Type. Verder vond ik nog een implementatie van Mozilla, geen idee hoe het met de afhankelijkheden zit.
Het resultaat van 10 minuten googelen & zoeken op koders.
die 2 pagina's had ik natuurlijk al gezien... maar de output van die scripts lijkt helemaal niet op die van php ..
Waarom kies je niet voor het HTTPS protocol?
ik boots geen http na. Is het nu te veel gevraagd om gewoon op mijn vraag te antwoorden en niet steeds offtopic te gaan?
http://www.chilkatsoft.com/js-aes-decrypt.asp
http://snippets.dzone.com/posts/show/4975
deze 2 zijn heel erg goed vind ik
iets met gmail aes decrypter
http://people.eku.edu/styere/Encrypt/JS-AES.html
en allemaal voorbeelden met aes .. ook zeer handig ..
http://www.langenhoven.com/code/emailencrypt/gmailencrypt.php
(offtopic: het manier waarop je dit vraagt, vindt ik dat het wat beter kan...)
edit:
http://www.hanewin.net/encrypt/aes/aes.htm
Gewijzigd op 01/01/1970 01:00:00 door Kumkwat Trender
@peter: het voorbeeldje van je eerste link doet niets, tweede link is voor Ruby, derde link wil max maar 16 tekens encrypten.
@Jelmer: weet jij hoe dat voorbeeld werkt op die 2de link? ik vat het niet echt goed hoe het moet.
http://www.chilkatsoft.com/js-aes-decrypt.asp
dat script moet wel werken
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<script type="text/javascript" language="javascript">
function aesDecrypt()
{
document.crypt2.UnlockComponent("Anything goes here.");
// Crypt algorithms include "aes", "blowfish2", "twofish", "pki"
document.crypt2.CryptAlgorithm = "aes";
// Output encoding possibilities include "base64", "hex", "qp", or "url"
document.crypt2.EncodingMode = "base64";
// Key length can be 128, 192, or 256
document.crypt2.KeyLength = 128;
document.crypt2.SecretKey =
document.crypt2.GenerateSecretKey(document.form1.password.value);
document.form1.etx.value =
document.crypt2.DecryptStringENC(document.form1.etx.value);
}
</script>
function aesDecrypt()
{
document.crypt2.UnlockComponent("Anything goes here.");
// Crypt algorithms include "aes", "blowfish2", "twofish", "pki"
document.crypt2.CryptAlgorithm = "aes";
// Output encoding possibilities include "base64", "hex", "qp", or "url"
document.crypt2.EncodingMode = "base64";
// Key length can be 128, 192, or 256
document.crypt2.KeyLength = 128;
document.crypt2.SecretKey =
document.crypt2.GenerateSecretKey(document.form1.password.value);
document.form1.etx.value =
document.crypt2.DecryptStringENC(document.form1.etx.value);
}
</script>
Maar met aes moet alles in blokken van een bepaalde grootte anders werkt het algoritme niet.
Dus een tekst moet je opvullen met iets totdat een veelvoud is van de blok grootte.
Daarom 16 tekens => 128 bit ;)
// Key length can be 128, 192, or 256
document.crypt2.KeyLength = 256;