我如何编码字符串,ByteArray在ActionScript作为VB或c#

本文关键字:ActionScript ByteArray 作为 VB 字符串 何编码 编码 | 更新日期: 2023-09-27 18:04:17

我想使用mx.utils对密码进行哈希。SHA256SHA256算法在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` 

我如何编码字符串,ByteArray在ActionScript作为VB或c#

相当简单的过程,但Actionscript的SHA256类的文档相当平淡,你需要做的是:

  1. 将您的盐化字符串写入ByteArray
  2. 呼叫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