0

これは基本的なセキュリティアプリであり、一部のデータを暗号化して解読したいだけです。テキストボックスにサイバーテキストを表示し、そのテキストを取得した後、それをバイト配列に変換した後、復号化中に取得していますエラー

Error: ECB mode cipher length must be a multiple of blocksize 16
    at com.hurlant.crypto.symmetric::ECBMode/decrypt()

これは security.mxml です

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <fx:Script>
        <![CDATA[
            import com.hurlant.crypto.Crypto;
            import com.hurlant.crypto.prng.Random;
            import com.hurlant.crypto.symmetric.ICipher;
            import com.hurlant.util.Base64;
            import com.hurlant.util.Hex;
            import com.security.AesKeyGen;
            import com.security.EncryptionKeyGen;

            import mx.utils.Base64Decoder;
            public var mytest:String;
            private var kdata:ByteArray = new ByteArray();
            private var cleartextBytes:ByteArray = new ByteArray();
            private function encryptedSave():void
            {
                //create or retrieve the current shared object
                var so:SharedObject = SharedObject.getLocal("encryptedStore");

                //generate a random key

                var ec:EncryptionKeyGen = new EncryptionKeyGen();
                kdata=//some plaine text converted to byte array or some byte array
                trace(kdata);
                //store our data to encrypt into a ByteArray

                cleartextBytes.writeUTFBytes(plainText.text);

                var aes:ICipher = Crypto.getCipher("aes-ecb", kdata, Crypto.getPad("pkcs5"));

                aes.encrypt(cleartextBytes);
                trace("after Encription-------------"+cleartextBytes.length+cleartextBytes);

            }

            private function encryptedLoad():void
            {cleartextBytes=new ByteArray();
                cleartextBytes.writeUTFBytes(cyperText.text);
                                 trace(cleartextBytes +"-------------"+cleartextBytes.length);
                var aes:ICipher = Crypto.getCipher("aes-ecb", kdata, Crypto.getPad("pkcs5"));

                aes.decrypt(cleartextBytes);

            }
        ]]>
    </fx:Script>

    <mx:Panel width="600" height="400" title="FlexEncryptionExample1">
        <mx:Form width="100%">
            <mx:FormHeading label="Stored WebService credentials"/>
            <mx:FormItem label="User: " width="100%">
                <mx:TextInput id="plainText" width="100%"/>
            </mx:FormItem>
            <mx:FormItem label="CyperText: " width="100%">
                <mx:TextInput id="cyperText" width="100%"/>
            </mx:FormItem>
            <mx:FormItem label="plainText2: " width="100%">
                <mx:TextInput id="plainText2"  width="100%"/>
            </mx:FormItem>
            <s:Label text="" id="encryptedText" visible="false"/>
        </mx:Form>
        <mx:HBox width="100%" horizontalAlign="center" verticalAlign="bottom">
            <mx:Button label="Save" click="encryptedSave()"/>
            <mx:Button label="Load" click="encryptedLoad()"/>
        </mx:HBox>
    </mx:Panel>
</s:Application>

誰でも私を助けてくださいありがとう.....

4

1 に答える 1

0

文字列に変換する際のAes暗号化の後、次のコードを追加し、最終的にすべてが正しくなりました........

            aes.encrypt(cleartextBytes);
            trace("after Encription-------------"+cleartextBytes.length+cleartextBytes);
            cleartextBytes.position=0;
            var myEncoder:Base64Encoder = new Base64Encoder();

            myEncoder.encodeBytes(cleartextBytes);

            cyperText.text=myEncoder.toString();

            trace("Encoded string length"+cyperText.text.length);
于 2012-06-19T10:10:17.773 に答える