Jump to content
php.lv forumi

FLEX data encode


Recommended Posts

IR nepieciešama metode, ar kuru droši aizkodēt un atkodēt nosūtāmos datus starp php un adobe FLEX aplikāciju. Tipa ar salt, base64 kodē abos virzienos, bet bez salt :/ vajag, lai ir salt.

 

Vienvārdsakot nepieciešams nosargāt daļu nosūtāmo/saņemamo datu no galalietotāja. Salt flašs saņems no inklūdojama swf, kurš katram userim uz sesiju ģenerējas jauns.

Link to comment
Share on other sites

vajag, lai vienreiz padodot: "Roma" no php uz FLEX - pa ceļam ir redzams tikai aizšifrēts vārds Roma. Rezultātu lietotājam parāda flex. Kā viņam pašam to atšifrēt, ja atslēga būs mainīga un nebūs viņam pieejama?

 

Es saprotu, ka pastāv dažādi flash dekompilatori, bet man vajag panākt, lai uz uz kādu no php dotu vārdu lietotājs nevar automātiski padot atpakaļ viņa sagatavotu atbildi.

Ja kādam ļooti vajadzēt - visu var izdarīt, bet vajag kā minimums, lai nav vienkārši to izdarīt un man jau uzreiz atkritīs 99% feika.

 

Nosūtāmiem datiem ir nenormāli daudz variāciju, tāpēc neder iepriekš sagatavotas atbildes, vajag on fly.

Edited by ohmygod
Link to comment
Share on other sites

ja tev vajag tikai muļķu drošu sistēmu (lai pa http ceļo viegli nošifrēts vārds), taču ir ok, ja dekompilētāji un kripteri to var easy uzlauzt, tad kā salt var izmantot skaitli:

$iSalt = rand(1, 255);

katram vārda baitam pieskaiti šo sāli pēc moduļa 256 un iegūsi citu baitu:

for ($i = 0; $i < strlen($sVards); $i++) $sVards[$i] = chr((ord($sVards[$i]) + $iSalt) % 256);

līdzīgi vārdu atkodē iekš tā FLEX tikai tur šo sāli atņem no katra baita, un beigās iegūst sākotnējo vārdu. nobīde/aizvietošana laikam bija viens no pašiem vnkāršākajiem kriptogrāfijas veidiem

 

EDIT: uzlabojums iepriekšējam algoritmam: lai mazliet sarežģītu dekriptēšanas darbu, katru nākamo baitu var pārveidot ar mazliet citu sāli - lielāku/mazāku nekā iepriekšējo, izmantojot aritmētisko vai ģeometrisko progresiju. tad nevarēs tā vnkārši apskatīt 256 variantus, kur viegli būtu redzams sākotnējais vārds

// $s - source string
// $iSalt - byte shift
// $iPepper - progresijas solis (priekš mazliet paātrinātas++ aritmētiskās progresijas :D)
function easyCrypt($s, $iSalt, $iPepper) {
$s2 = chr($iSalt) . chr($iPepper);
for ($i = 0; $i < strlen($s); $i++) {
	$iSalt += $iPepper++;
	$s[$i] = chr((ord($s[$i]) + $iSalt) % 256);
}
return $s2 . $s;
}
function easyDecrypt($s) {
$iSalt = ord($s[0]);
$iPepper = ord($s[1]);
$s = substr($s, 2);
for ($i = 0; $i < strlen($s); $i++) {
	$iSalt += $iPepper++;
	$s[$i] = chr((ord($s[$i]) - $iSalt) % 256);
}
return $s;
}

imho, kamēr krakeri nezinās šo datu formātu un algoritmu, viņiem vieglāk būs dekompilēt tavu FLEX, lai saprastu, kas tur notiek, nekā no ārpuses mēģināt uzminēt, kā ir nošifrēts vārds :D

 

EDIT2: un gan "sāls", gan "pipari" ir 1x baits. iesaku tos uzģenerēt šādi

$iSalt = rand(1, 255);
$iPepper = rand(1, 255);

Edited by 2easy
Link to comment
Share on other sites

AS jau tas pats JS vien ir (vismaz agrāk pirms AS3 tā bija). kr4 abi ir ECMAScript, tb balstās uz ECMA-262 standartu http://www.ecma-international.org/publications/standards/Ecma-262.htm

tāpēc, iespējams, šīs js funkcijas 1:1 var izmantot arī iekš AS

function easyCrypt(s, iSalt, iPepper) {
var s2 = String.fromCharCode(iSalt) + String.fromCharCode(iPepper);
for (var i = 0; i < s.length; i++) {
	iSalt += iPepper++;
	s2 += String.fromCharCode((s.charCodeAt(i) + iSalt) % 256);
}
return s2;
}
function easyDecrypt(s) {
var iSalt = s.charCodeAt(0);
var iPepper = s.charCodeAt(1);
var c, s2 = "";
s = s.substr(2);
for (var i = 0; i < s.length; i++) {
	iSalt += iPepper++;
	c = (s.charCodeAt(i) - iSalt) % 256;
	s2 += String.fromCharCode(c < 0 ? c + 256 : c);
}
return s2;
}

function rand(iMin, iMax) {return iMin + Math.floor(Math.random() * (iMax - iMin + 1));}

Link to comment
Share on other sites

piebilde par nokriptēto datu sūtīšanu (http: client <-> server)

tā kā nokriptētajos datos var būt jebkādi baiti, tai skaitā 0 (kas nozīmē stringa beigas), tad lai sūtīšanas laikā nerastos datu zudumi vai kādi citi blakus efekti, nokriptētos datus iekodē ar base64_encode() (un otrā galā atkodē :D)

 

base64 kodējums pārveido sākotnējos datus, izmantojot tikai šos simbolus ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

kurus var droši sūtīt pa tīklu un nekādas problēmas ar tiem neradīsies ;)

 

http://php.net/manual/en/function.base64-encode.php

This encoding is designed to make binary data survive transport through transport layers that are not 8-bit clean, such as mail bodies.
Link to comment
Share on other sites

tas ko tu saki, izklausās ticami ^^

vnk viņš man rakstīja pm un teica, ka pa taisno sūtot nokriptētos datus, ir bijušas problēmas: datu zudumi un vēl tur kkādi prikoli. tad es ieteicu šo variantu. iespējams, ka tā applikācija klienta galā neņem pretī kādu baitu un sāk gļučīt. hvz, es jau to tālāk par php/js nemaz netestēju

Edited by 2easy
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...