我正在尝试使用多通道登录自动将用户登录到assistly.com,如下所述:http://dev.assistly.com/docs/portal/multipass
我曾尝试使用as3crypto将他们的代码示例( https://github.com/assistly/multipass-examples)转换为Actionscript,但显然没有成功。
这就是我所拥有的:
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;
}
}
}我假设我在静脉注射或填充物上做错了什么,因为我不太理解它;-)
发布于 2011-11-14 08:13:23
您可能希望使用不同的加密类,或者修改as3crypto加密类。我知道在SHA1函数和PHP sha1函数之间有不一致的地方。请看以下内容:
sha1 hash from as3crypto differs from the one made with PHP
这可能会使您的值无效。我的建议是在计算数据时跟踪所有数据,并在PHP或github中的另一个示例中运行相同的数据。看看数据的分歧之处。我敢打赌,这将是与AS3Crypto相关的问题。
https://stackoverflow.com/questions/8021147
复制相似问题