我想使用mx.utils对密码进行哈希。SHA256或SHA256
算法在ActionScript
为我的SQLite
本地数据库哈希密码。这样我就可以将插入的密码与存储在HashedPassword
的数据库相匹配。对于这个,我也使用Salt
。
我想要与ActionScript
相同的东西,我在VB
代码中做过。
如何将ActionScript
中的以下内容从VB.NET
更改为
Encoding.UTF8.GetBytes("String")
String Salt
- type参数。
System.Text.Encoding.Default.GetBytes(Salt.ToString.ToCharArray))
byte HashOut
- type参数。
Convert.ToBase64String(HashOut)
Array.Copy()
method Copies
按照指定的长度将一个字节数组转换成另一个字节数组:
Array.Copy(Data, DataAndSalt, Data.Length) // concatenation of Arrays in context of `ActionScript`
相当简单的过程,但Actionscript的SHA256
类的文档相当平淡,你需要做的是:
- 将您的盐化字符串写入
ByteArray
呼叫
SHA256.computeDigest()
,
public function hashMyString(mySaltedInput:String):String
{
var bytes:ByteArray = new ByteArray;
bytes.writeUTFBytes(mySaltedInput):
return SHA256.computeDigest(bytes);
}
我根据自己的要求创建了整个代码,这是在VB中完成的,现在两者都产生了相同的结果。
-
Encoding.UTF8.GetBytes("String")
在ActionScript中的VB代码为yourByteArray.writeMultiByte("String", "iso-8859-1");
-
System.Text.Encoding.Default.GetBytes(Salt.ToString.ToCharArray))
ActionScript中的VB代码byterrSalt.writeMultiByte(Salt,Salt);
-
Array.Copy(Data, DataAndSalt, Data.Length)
是用于字节数组的连接,该连接已在动作脚本由
完成
var DataAndSalt:ByteArray = new ByteArray();
DataAndSalt.writeBytes(Data);
DataAndSalt.writeBytes(Salt);
DataAndSalt ByteArray将有两个ByteArray现在Data + Salt
数据是ByteArray,你可以通过.writeBytes(YourByteArray)
-
。
完成的Convert.ToBase64String(HashOut)
是通过以下函数private static const BASE64_CHARS:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; public static function encodeByteArray(data:ByteArray):String { // Initialise output var output:String = ""; // Create data and output buffers var dataBuffer:Array; var outputBuffer:Array = new Array(4); // Rewind ByteArray data.position = 0; // while there are still bytes to be processed while (data.bytesAvailable > 0) { // Create new data buffer and populate next 3 bytes from data dataBuffer = new Array(); for (var i:uint = 0; i < 3 && data.bytesAvailable > 0; i++) { dataBuffer[i] = data.readUnsignedByte(); } // Convert to data buffer Base64 character positions and // store in output buffer outputBuffer[0] = (dataBuffer[0] & 0xfc) >> 2; outputBuffer[1] = ((dataBuffer[0] & 0x03) << 4) | ((dataBuffer[1]) >> 4); outputBuffer[2] = ((dataBuffer[1] & 0x0f) << 2) | ((dataBuffer[2]) >> 6); outputBuffer[3] = dataBuffer[2] & 0x3f; // If data buffer was short (i.e not 3 characters) then set // end character indexes in data buffer to index of '=' symbol. // This is necessary because Base64 data is always a multiple of // 4 bytes and is basses with '=' symbols. for (var j:uint = dataBuffer.length; j < 3; j++) { outputBuffer[j + 1] = 64; } // Loop through output buffer and add Base64 characters to // encoded data string for each character. for (var k:uint = 0; k < outputBuffer.length; k++) { output += BASE64_CHARS.charAt(outputBuffer[k]); } } // Return encoded data return output; }
Thank You
Udit Bhardwaj