2010-10-05 5 views
0

Je veux encoder/décoder une chaîne en AS3:flash encode chaîne AS3 decode

var string:String = "This is an text";

encode(string) donnera par exemple: yuioUasUenUwdfr.
decode(encoded(string)) donnera: This is an text.
Il n'a pas besoin d'être sécurisé ou quoi que ce soit.

Répondre

1

je suggère soit base64 ou rot13 encodage. Il y a beaucoup d'implémentations AS3 pour chacun. Google fournira.

+0

ROT13 a l'air bien. Toute idée cela fonctionnera avec des caractères spéciaux (* & ^% $ #) aussi? – Allard

+0

Voici la bibliothèque dont il parle: http://github.com/mikechambers/as3corelib – UltimateBrent

1

Une autre option utilise un XOR cypher, avec une clé. Cette méthode est totalement cassable, bien sûr, mais cela prend un peu plus de travail, donc pour obscurcir votre texte, ça devrait aller.

Voici une mise en œuvre simple. (Il utilise hurlant's Base64 encoder, ce qui est juste pour le rendre binaire sûr, de ne pas ajouter plus l'obscurité)

import com.hurlant.util.Base64; 

function applyXor(inputBuffer:ByteArray,key:String):ByteArray { 
    var outBuffer:ByteArray = new ByteArray(); 

    var keysBuffer:ByteArray = new ByteArray(); 
    keysBuffer.writeUTFBytes(key); 

    var offset:int = 0; 
    var inChar:int; 
    var outChar:int; 
    var bitMask:int; 

    while(inputBuffer.bytesAvailable) { 
     offset = inputBuffer.position % keysBuffer.length; 
     inChar = inputBuffer.readUnsignedByte(); 

     bitMask = keysBuffer[offset]; 

     outChar = bitMask^inChar;  
     outBuffer.writeByte(outChar); 

    } 

    return outBuffer; 
} 

function encode(input:String,key:String):String { 
    var inputBuffer:ByteArray = new ByteArray(); 
    inputBuffer.writeUTFBytes(input); 
    inputBuffer.position = 0; 
    var out:ByteArray = applyXor(inputBuffer,key); 
    return Base64.encodeByteArray(out); 
} 

function decode(input:String,key:String):String { 
    var inputBuffer:ByteArray = Base64.decodeToByteArray(input); 
    var out:ByteArray = applyXor(inputBuffer,key); 
    out.position = 0; 
    return out.readUTFBytes(out.length); 
} 

var str:String = "This is some text. Let's add non-ascii chars like Ñ,à,ü, etc, just to test it."; 
var key:String = "whatever &^%$#"; 
var encoded:String = encode(str,key); 
var decoded:String = decode(encoded,key); 

trace(encoded); 
trace(decoded); 
trace(decoded == str); 
1

Merci, les gars! Je l'ai fait fonctionner avec com.hurlant.util.Base64.