encrypt methode: graag commentaar
mijn methode is vast minder slim dan die van hipska, maar ik wil hem toch graag tonen en horen wat jullie er van vinden.
index.php
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
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
<?php
define('SECRET', 'hallo, dit bericht is nooit ongecodeerd over de lijn gegaan en client en server hoeven niks van elkaars encryptie methode te weten.');
define('NUMBER', 5);
function add_lock($message) {
$message = str_split($message);
$result = '';
foreach($message as $char) {
$result .= chr(ord($char) + NUMBER);
}
return $result;
}
function remove_lock($message) {
$message = str_split($message);
$result = '';
foreach($message as $char) {
$result .= chr(ord($char) - NUMBER);
}
return $result;
}
if(!isset($_GET['step'])) { ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>encription test</title>
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="custom.js"></script>
</head>
<body>
<?php print_r($_GET); ?>
</body>
</html>
<?php
} elseif(isset($_GET['step']) && $_GET['step'] == 1) {
echo add_lock(SECRET);
} elseif(isset($_GET['step']) && isset($_GET['message']) && $_GET['step'] == 2 && $_GET['message'] != add_lock(SECRET)) {
echo remove_lock($_GET['message']);
} else {
echo "error";
}
?>
define('SECRET', 'hallo, dit bericht is nooit ongecodeerd over de lijn gegaan en client en server hoeven niks van elkaars encryptie methode te weten.');
define('NUMBER', 5);
function add_lock($message) {
$message = str_split($message);
$result = '';
foreach($message as $char) {
$result .= chr(ord($char) + NUMBER);
}
return $result;
}
function remove_lock($message) {
$message = str_split($message);
$result = '';
foreach($message as $char) {
$result .= chr(ord($char) - NUMBER);
}
return $result;
}
if(!isset($_GET['step'])) { ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>encription test</title>
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="custom.js"></script>
</head>
<body>
<?php print_r($_GET); ?>
</body>
</html>
<?php
} elseif(isset($_GET['step']) && $_GET['step'] == 1) {
echo add_lock(SECRET);
} elseif(isset($_GET['step']) && isset($_GET['message']) && $_GET['step'] == 2 && $_GET['message'] != add_lock(SECRET)) {
echo remove_lock($_GET['message']);
} else {
echo "error";
}
?>
custom.js
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
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
window.NUMBER = Math.round(Math.random() * 10);
function add_lock(message) {
var result = "";
for (x = 0; x < message.length; x++){
result += String.fromCharCode(message.charCodeAt(x) + window.NUMBER);
}
return result;
}
function remove_lock(message) {
var result = "";
for (x = 0; x < message.length; x++){
result += String.fromCharCode(message.charCodeAt(x) - window.NUMBER);
}
return result;
}
window.result = "";
$.get("index.php", {step: "1"}, function(data){
window.result = data;
alert(window.result + " -> " + add_lock(window.result));
$.get("index.php", {step: "2", message: add_lock(window.result)}, function(data){
window.result = data;
alert(window.result + " -> " + remove_lock(window.result));
});
});
function add_lock(message) {
var result = "";
for (x = 0; x < message.length; x++){
result += String.fromCharCode(message.charCodeAt(x) + window.NUMBER);
}
return result;
}
function remove_lock(message) {
var result = "";
for (x = 0; x < message.length; x++){
result += String.fromCharCode(message.charCodeAt(x) - window.NUMBER);
}
return result;
}
window.result = "";
$.get("index.php", {step: "1"}, function(data){
window.result = data;
alert(window.result + " -> " + add_lock(window.result));
$.get("index.php", {step: "2", message: add_lock(window.result)}, function(data){
window.result = data;
alert(window.result + " -> " + remove_lock(window.result));
});
});
het idee is dat de php pagina een bericht gecodeerd naar de client verstuurd, de client voegt zijn sleutel er aan toe en stuurt het terug, waarna de server zijn sleutel er weer af haalt, waarna uiteindelijk de client ook weer zijn sleutel er af haalt.
je moet je data 2 keer zo vaak versturen, maar geen enkele keer gaat het als normale text over de lijn.
wat ook een voordeel zou kunnen zijn is dat de client en server niks van elkaars methode hoeven te weten, dit heb ik proberen te demonstreren door de js methode met een random nummer te laten werken.
het enige probleem dat ik er nog me heb is dat de volgorde van de sleutels niet uit mag maken, als ik er een normale encryptie overheen haal en dan nog een en dan de eerste weer er af haal werkt dat niet, het enige wat ik tot nu toe heb weten te verzinnen is een simpele letter verschuif functie, die kan je zo vaak doen en terug doen als je maar wil.
weet iemand toevallig een encryptie methode die dit kan?
Gewijzigd op 01/01/1970 01:00:00 door Pepijn de vos
Wat wil je nu precies? Gewoon de gegevens coderen?
jep, verder heeft dit geen speciaal doel, ik experimenteer gewoon een beetje, en ik zou graag weten waar het beter kan of dat het geheel gewoon een slecht idee is.
Hier probeer ik even te schetsen welke data er wanneer verstuurd wordt (window.NUMBER is hier bv 2)
Nu is de eerste data die verstuurd wordt nogal voorspelbaar terug te halen.
Bv. stuur je "Hallo" dan wordt die verstuurd als "Mfqqt".
Dit is dmv brute-forcen en woordenboeken heel erg snel terug te halen. Als je $i neemt en in een for lus telkens $i++ doet en dan met die $i remove_lock doet heb je na een korte tijd dit lijstje:
Als er dan een volledige zin werd gecodeerd is heel erg snel duidelijk welke van de gedecodeerde zinnen de juiste zin is.
Mijn voorstel om het iets minder voorspelbaar terug te halen is dit:
Elk karakter een ander nummer laten toewijzen om te verschuiven, en dit zowel positief als negatief. Dit lijstje nummers kan serverside opgeslaan worden in een session of DB en bij de client gewoon in een var array in javascript.
PS. natuurlijk telkens volledig random he..
EDIT:
Ik bedenk me net dat het super onveilig is...
Als de hacker de eerste verstuurde string ophaalt en die dan met zijn eigen gekozen nummers encodeerd, dan krijgt hij van de server ook gewoon antwoord die hij met zijn eigen keys kan decoderen tot leesbare string.
NIET GEBRUIKEN dus!
Gewijzigd op 01/01/1970 01:00:00 door Hipska BE
subsitutie toepassen. Dit is te voorspelbaar zoals Hipska al aangaf.
Ik zou vooral NIET gaan 'shiften' met ASCII characters en ook niet