Actionscript 3 错误#1502:脚本的执行时间超过默认值>;超时时间为15秒

Actionscript 3 错误#1502:脚本的执行时间超过默认值>;超时时间为15秒,actionscript-3,encryption,rsa,as3crypto,Actionscript 3,Encryption,Rsa,As3crypto,我正在尝试使用Flash(AS3)和C#作为服务器来创建一个安全的登录系统。但我有一个问题: 错误:错误#1502:脚本的执行时间超过默认值 超时时间为15秒。 在com.hurlant.crypto.rsa::RSAKey/_encrypt()[RSAKey.as:115] rsa::RSAKey/encrypt()[RSAKey.as:89] 在client.login::createLogin$/rsaEncrypt()[login.as:30] 在Flash中,我使用AS3-CRYPTO

我正在尝试使用Flash(AS3)和C#作为服务器来创建一个安全的登录系统。但我有一个问题:

错误:错误#1502:脚本的执行时间超过默认值 超时时间为15秒。 在com.hurlant.crypto.rsa::RSAKey/_encrypt()[RSAKey.as:115] rsa::RSAKey/encrypt()[RSAKey.as:89] 在client.login::createLogin$/rsaEncrypt()[login.as:30]

在Flash中,我使用AS3-CRYPTO库:

闪存代码: 登录名

私有静态变量w:String=“abcdefghijklmnopqrstuvxyz”; 私有静态变量privKey=“zRSdzFcnZjOCxDMkWUbuRgiOZIQlk7frZMhElQ0a7VqZI9VgU3+lwo0ghZLU3Gg63kOY2UyJ5vFpQdwJUQydsF337ZAUJz4rwGRt/mnl70wm71ngfmdpv4+dyj3zxfwawwe1zsmjmoqty4iv8his/hlgxufihvdk87nmnlc=”; 私有静态var privKey2=“AQAB”; 公共函数createLogin(昵称:String):RequestLoader { var帐户:AccountInfo=Users.account account.Key=generateRsaKey(privKey,privKey2); var byteArray:byteArray=new byteArray(); var-tempPassword:String=“”; var tmpPassInt:int=0; 而(tmpPassInt<6) { tempPassword=tempPassword+w.charAt(int(Math.random()*26)); tmpPassInt++; } byteArray.writeUTFBytes(account.account+”、“+account.Password+”、“+tempPassword+”、“+昵称); var rsacencrypted:String=rsaconcrypt(account.Key,byteArray); var requestV:URLVariables=RequestVariableCreater.creatWidthKey(false); requestV[“v”]=rsa加密; var requestLoader:requestLoader=Loader.creatLoader(“Login.ashx”,requestV); } 公共函数生成器密钥(param1:String,param2:String):RSAKey { var key:biginger=newbiginger(Base64.decodeToByteArray(param1)); var key2:biginger=新的biginger(Base64.decodeToByteArray(param2)); 返回新的RSAKey(key,key2.intValue()); } 公共函数rsacyncrypt(param1:RSAKey,param2:ByteArray):字符串 { var byteArray:byteArray=new byteArray(); param1.encrypt(param2,byteArray,param2.length); 返回Base64.encodeByteArray(byteArray); }
已解决。通过PEM创建RSAKey对象:

var pem:String = "-----BEGIN PUBLIC KEY-----\n" +
                "MIqMAe3DQEBrGNADCBiQKBgQCOLfJKjA8DhOFse3ex4zdlu2oh\n" +
                "E8g1AhDBpQKMQaPaCH/irVFijsmfOsWIWyRrcDmmj2CBaS4b\n" +
                "EwsD/qANC5KpFRdCkrKM7cyi0peK3v1sZqMODdN04vc+N/JE\n" +
                "xMLoaOo8xIDAQAB\n" +
                "-----END PUBLIC KEY-----";
            PEM.readRSAPublicKey(pem);

有两个很好的解决方法。1.将加密例程更改为更快的程序,减少原始字符串的长度,或者使用可能更快的MD5或SHA1。2.当主线程(控制UI的线程)运行并响应时,使用后台工作线程可以占用世界上所有的时间。还有第三条路。在发布设置中增加执行超时,但在我个人看来,这是一种非常糟糕的方式:你的应用程序在执行时会冻结,你也无法知道在任何给定的最终用户设备上这种编码会花费多少时间。lib应该有一些问题,因为正常的超时时间是15秒,即使使用AS3,使用RSA加密大约1k字节也需要几毫秒。请测量创建新RSA密钥(实际上是密钥对,此操作确实很长)的时间,然后执行返回事件处理程序,然后测量加密1k随机字节所需的时间(仅加密,不在任何地方传输)。也许Flash引擎的“bug修补和保护”有点可疑,它会将加密操作拖慢到爬行/停止。您好,我在这个网站上生成了一个新的私钥/公钥:现在我有另一个错误:“System.Security.Cryptography.CryptographyException:要解密的日期超过了此128字节模块的最大值。”在请求时,请检查lib上的限制,可能它不能一次加密超过一定数量的数据。大型软件仅使用RSA加密/解密AES密钥,然后使用AES加密/解密大部分数据。
var pem:String = "-----BEGIN PUBLIC KEY-----\n" +
                "MIqMAe3DQEBrGNADCBiQKBgQCOLfJKjA8DhOFse3ex4zdlu2oh\n" +
                "E8g1AhDBpQKMQaPaCH/irVFijsmfOsWIWyRrcDmmj2CBaS4b\n" +
                "EwsD/qANC5KpFRdCkrKM7cyi0peK3v1sZqMODdN04vc+N/JE\n" +
                "xMLoaOo8xIDAQAB\n" +
                "-----END PUBLIC KEY-----";
            PEM.readRSAPublicKey(pem);