Многопроходный вход на assistly.com с as3crypto - PullRequest
3 голосов
/ 05 ноября 2011

Я пытаюсь автоматически войти в систему моих пользователей в assistly.com с помощью их многопроходного входа, как описано здесь: http://dev.assistly.com/docs/portal/multipass

Я попытался преобразовать их примеры кода (https://github.com/assistly/multipass-examples) в Actionscriptиспользование as3crypto, очевидно, безуспешно.

Вот что у меня есть:

package
{
    import com.adobe.crypto.SHA1;
    import com.adobe.serialization.json.JSON;
    import com.hurlant.crypto.*
    import com.hurlant.util.Base64;
    import flash.utils.ByteArray;

    public class AssistlySingleSignOn
    {
        protected static var API_SITE_KEY:String = "YOUR SITE KEY"
        protected static var MULTIPASS_KEY:String = "YOUR MULTIPASS API KEY"

        public function AssistlySingleSignOn()
        {
        }

        public static function generateMultipass(uid:String, username:String, email:String):String
        {
            var o:Object = {};
            o.uid = uid;
            o.expires = "2012-12-29T10:25:28-08:00";
            o.customer_email = email;
            o.customer_name = username;

            var salted:String = API_SITE_KEY + MULTIPASS_KEY;
            var hash:String = SHA1.hash(salted);
            var saltedHash:String = hash.substr(0, 16);
            var iv:String = "OpenSSL for Ruby";

            var ivByteArray:ByteArray = new ByteArray();
            ivByteArray.writeUTFBytes(iv);

            var key:ByteArray = new ByteArray();
            key.writeUTFBytes(saltedHash);
            key.position = 0;

            var json:String = JSON.encode(o);
            var jsonByteArray:ByteArray = new ByteArray();
            jsonByteArray.writeUTFBytes(json);

            var padding:IPad = new PKCS5(16);
            ivByteArray.position = 0;

            key.position = 0;
            var cyphered:CBCMode = Crypto.getCipher("aes-128-cbc", key, padding) as CBCMode;
        jsonByteArray.position = 0;
        cyphered.IV = ivByteArray;
        cyphered.encrypt(jsonByteArray);

            jsonByteArray.position = 0;
        var base64:String = Base64.encode(jsonByteArray.readUTFBytes(jsonByteArray.length));

        /*Convert to a URL safe string by performing the following

        Remove any newlines
        Remove trailing equal (=) characters
        Change any plus (+) characters to dashes (-)
        Change any slashes (/) characters to underscores (_)*/

        base64 = base64.replace(/\n/g, "");
        base64 = base64.replace(/=/g, "");
        base64 = base64.replace(/+/g, "-");
        base64 = base64.replace(/\//g, "_");

        return base64;
        }
    }
}

Я предполагаю, что я делаю что-то не так с IV-компонентом или заполнением, потому что я нея не совсем понимаю; -)

1 Ответ

3 голосов
/ 14 ноября 2011

Возможно, вы захотите использовать другой класс шифрования или изменить класс as3crypto. Я знаю, что есть несоответствия в функции SHA1 по сравнению с функцией sha1 PHP. Смотрите это:

хэш sha1 от as3crypto отличается от хеша, созданного в PHP

Это может сделать ваши значения недействительными. Я бы порекомендовал отследить все ваши данные по мере их расчета и использовать их в тех же целях в PHP или другом примере в github. Посмотрите, где данные расходятся. Я держу пари, что это будут проблемы, связанные с AS3Crypto.

...