【问题标题】:flash as3 string encode decodeflash as3 字符串编码解码
【发布时间】:2025-12-25 17:30:11
【问题描述】:

我想在 AS3 中编码/解码一个字符串:

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

encode(string) 将给出例如:yuioUasUenUwdfr
decode(encoded(string)) 将给出:This is an text
它不必是安全的或任何东西。

【问题讨论】:

    标签: flash actionscript-3 string decode encode


    【解决方案1】:

    我建议使用base64rot13 编码。每个都有许多 AS3 实现。 Google 会提供。

    【讨论】:

    • ROT13 看起来不错。知道这也适用于特殊字符 (*&^%$#) 吗?
    【解决方案2】:

    另一种选择是使用带有密钥的XOR cypher。当然,这种方法是完全可以破解的,但它需要更多的工作,所以对于模糊你的文本应该没问题。

    这是一个简单的实现。 (它使用hurlant's Base64 encoder;这只是为了使其二进制安全,而不是增加更多的晦涩)

    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);
    

    【讨论】:

      【解决方案3】:

      谢谢各位!使用 com.hurlant.util.Base64 启动并运行它。

      【讨论】:

        【解决方案4】:

        如果您正在构建 AIR 应用程序,您可以使用 EncryptedLocalStore 类加密您的数据。

        【讨论】: