在php中,您可以使用crypt函数,并以“$ 2a $”开头给它使用CRYPT_BLOWFISH来加密字符串。
例如。
echo crypt("test", "$2a$13$1mFan0ihXzWfxATGXSKRqe");
//output: $2a$13$1mFan0ihXzWfxATGXSKRqedMoYWoXpPizu4Q274LnpVVJ7gyza3Lq
我尝试使用as3crypto库在as3中生成输出。我试过的代码片段。
var key:ByteArray = Hex.toArray("$2a$13$1mFan0ihXzWfxATGXSKRqe");
var blowfish:BlowFishKey = new BlowFishKey(key);
var dataBytes:ByteArray = new ByteArray();
dataBytes.writeUTFBytes("test");
blowfish.encrypt(dataBytes);
var encrypted:String = Hex.fromArray(dataBytes).toUpperCase();
trace(encrypted);
//output: 986C8D386BEAD6AE
我不认为那些河豚密码是一样的。基于bcrypt的php blowfish是根据php.net上的文档的一种方式。在as3中我也可以解密加密的消息。
我搜索了在as3中提供与php相同输出的blowfish库而没有成功。任何人都知道如何在动作脚本3.0中生成与php中相同的输出?
更新
我正在使用adobe air。因此原生解决方案也是可以接受的。我可以创建一个本机扩展或使用NativeProcess来访问它来进行加密而不是as3。
更新2 目前我正在使用c#使用http://derekslager.com/blog/posts/2007/10/bcrypt-dotnet-strong-password-hashing-for-dotnet-and-mono.ashx
上的bcrypt类创建的命令行程序