Skip to content

Instantly share code, notes, and snippets.

@Shagshag
Last active August 29, 2015 14:27
Show Gist options
  • Save Shagshag/f11ae01360a543a7b25f to your computer and use it in GitHub Desktop.
Save Shagshag/f11ae01360a543a7b25f to your computer and use it in GitHub Desktop.
<?php
/**
* idem than base64_encode()
*/
function mybase64_encode($to_encode)
{
$base64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
$encoded = '';
$padding = '';
$count = strlen($to_encode) % 3;
if ($count > 0) {
for (; $count < 3; $count++) {
$padding .= '=';
$to_encode .= "\0";
}
}
for ($position = 0; $position < strlen($to_encode); $position += 3) {
$n = (ord($to_encode[$position]) << 16)
+ (ord($to_encode[$position + 1]) << 8)
+ ord($to_encode[$position + 2]);
$n1 = ($n >> 18) & 63;
$n2 = ($n >> 12) & 63;
$n3 = ($n >> 6) & 63;
$n4 = $n & 63;
$encoded .= $base64_chars[$n1].$base64_chars[$n2].$base64_chars[$n3].$base64_chars[$n4];
}
return substr($encoded, 0, strlen($encoded) - strlen($padding)).$padding;
}
/**
* idem than base64_decode()
*/
function mybase64_decode($to_decode)
{
$base64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
$to_decode = preg_replace('[^'.$base64_chars.'=]', '', $to_decode);
$padding = (substr($to_decode, -1) == '=')?((substr($to_decode, -2, 2) == '==')?'AA':'A'):'';
$decoded = '';
$to_decode = substr($to_decode, 0, strlen($to_decode) - strlen($padding)).$padding;
$base64_positions = array_flip(str_split($base64_chars));
for ($position = 0; $position < strlen($to_decode); $position += 4) {
$n = ($base64_positions[$to_decode[$position]] << 18)
+ ($base64_positions[$to_decode[$position + 1]] << 12)
+ ($base64_positions[$to_decode[$position + 2]] << 6)
+ $base64_positions[$to_decode[$position + 3]];
$decoded .= chr(($n >> 16) & 0xFF).chr(($n >> 8) & 0xFF).chr($n & 0xFF);
}
return substr($decoded, 0, strlen($decoded) - strlen($padding));
}
$tests = array(
'Cham, père de Canaan, vit la nudité de son père, et il le rapporta dehors à ses deux frères.',
'Il répondit : J\'ai entendu ta voix dans le jardin, et j\'ai eu peur, parce que je suis nu, et je me suis caché.',
'Lorsque Noé se réveilla de son vin, il apprit ce que lui avait fait son fils cadet.',
'eux, et tous les animaux selon leur espèce, tout le bétail selon son espèce, tous les reptiles qui rampent sur la terre selon leur espèce, tous les oiseaux selon leur espèce, tous les petits oiseaux, tout ce qui a des ailes.',
'L\'Éternel se repentit d\'avoir fait l\'homme sur la terre, et il fut affligé en son coeur.',
'Adam connut encore sa femme ; elle enfanta un fils, et l\'appela du nom de Seth, car, dit-elle, Dieu m\'a donnée un autre fils à la place d\'Abel, que Caïn a tué.',
'Tout ce qui avait respiration, souffle de vie dans ses narines, et qui était sur la terre sèche, mourut.',
'Et l\'Éternel dit : J\'exterminerai de la face de la terre l\'homme que j\'ai créé, depuis l\'homme jusqu\'au bétail, aux reptiles, et aux oiseaux du ciel ; car je me repens de les avoir faits.',
'Alors Sem et Japhet prirent le manteau, le mirent sur leurs épaules, marchèrent à reculons, et couvrirent la nudité de leur père ; comme leur visage était détourné, ils ne virent point la nudité de leur père.',
'Car, encore sept jours, et je ferai pleuvoir sur la terre quarante jours et quarante nuits, et j\'exterminerai de la face de la terre tous les êtres que j\'ai faits.'
);
foreach ($tests as $test) {
var_dump(mybase64_decode(mybase64_encode($test)) == $test);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment