2014-10-29 262 views
1

我想將以二進制形式存儲的密碼轉換爲正常的ASCII形式,以便我可以讀取它。我需要的是一個VBScript和腳本還應該返回該解加密的密碼將二進制轉換爲字符串

如:加密的二進制密碼:00110001 00110010 00110011 00110100

德加密後的原始密碼:1234

我想這

'Binary contains the binary password 
dim S 
For I = 1 To LenB(Binary) 
S = S & Chr(AscB(MidB(Binary, I, 1))) 
Next 
MSGBOX S 

但輸出

0 

如何做到這一點。請幫忙!!

+1

即二進制不以任何方式 「加密」。另外,「以二進制存儲」甚至是什麼意思?你不能用二進制存儲任何東西。或者,表達方式不同,*所有*都以二進制形式存儲在計算機中。那麼,它是什麼?一個字節數組?它從何而來?如果它是一個字節數組,它代表了哪種字符編碼? – Tomalak 2014-10-29 07:43:00

回答

0

如果我是對的,你所要做的就是將二進制數轉換爲十進制數(例如0100 - > 4)?

dim binary, n, s 
binary= "00110001" 

For s = 1 To Len(binary) 
    n = n + (Mid(binary, Len(binary) - s + 1, 1) * (2^(s - 1))) 
Next 's 

WScript.Echo binary & " = " & n 

輸出

00110001 = 49

從這裏轉換:http://www.vb-helper.com/howto_decimal_to_binary.html

+0

這個答案完全是誤導。 「加密」不是「在轉換爲二進制之前將每個數字加48」。這就是所謂的ASCII。字符「1」的ASCII代碼是49.所以你的對話代碼是錯誤的,並且對於ASCII範圍以外的字符(除01111111之外的所有字符,即二進制中的127)都是平坦的。 @安南你真的,真的不應該使用這個答案。 – Tomalak 2014-10-29 10:06:18

+0

@Tomalak我會刪除最後一位然後 – 2014-10-29 10:08:02

+0

但很抱歉,這並沒有讓你的答案正確,但。 ;-) – Tomalak 2014-10-29 10:08:57

2

試試這個代碼;)

代碼:

function BinaryToString(bin) 
dim next_char 
dim result 
dim i 
dim ascii 
For i = 1 To Len(bin) + 18 Step 8 
     next_char = Mid(bin, i, 8) 
     ascii = BinaryToLong(next_char) 
     result = result & Chr(ascii) 
    Next 
    BinaryToString=result 
end function 

Function BinaryToLong(binary_value) 
Dim hex_result 
Dim nibble_num 
Dim nibble_value 
Dim factor 
Dim bit 

    binary_value = UCase(Trim(binary_value)) 
    If Left(binary_value, 2) = "&B" Then 
     binary_value = Mid(binary_value, 3) 
    End If 

    binary_value = Replace(binary_value, " ", "") 
    binary_value = Right(String(32, "0") & binary_value, 32) 

    For nibble_num = 7 To 0 Step -1 
     factor = 1 
     nibble_value = 0 

     For bit = 3 To 0 Step -1 
      If Mid(binary_value,1 + nibble_num * 4 + bit, 1) = "1" Then 
       nibble_value = nibble_value + factor 
      End If 
      factor = factor * 2 
     Next 'bit 

     hex_result = Hex(nibble_value) & hex_result 
    Next 'nibble_num 

    BinaryToLong = CLng("&H" & hex_result) 
End Function 

用法:

response.Write(BinaryToString("00110001001100100011001100110100")) 

不要忘了從二進制字符串騰飛 「」 空格

+0

請不要發佈兩個答案。 (你可以發佈兩個答案,但是發佈代碼*你寫了*,以及解釋,而不是你在互聯網上找到的代碼。這不是成就。) – Tomalak 2014-10-29 07:57:04

+0

我試圖刪除第一個,但是我不能,不知道爲什麼 – 2014-10-29 08:08:39

+0

你應該能夠刪除自己的帖子(就像你可以編輯它們一樣)。當你試圖刪除它時,你看到錯誤信息嗎? – Tomalak 2014-10-29 08:14:21

-3

有很多方法。

如果它再從幫助一個二進制值REG(你沒有讀它,沒有你)

的RegRead方法返回以下五種類型的值。

Type Description In the Form of 
REG_SZ 
A string 
A string 

REG_DWORD 
A number 
An integer 

REG_BINARY 
A binary value 
A VBArray of integers 

REG_EXPAND_SZ 
An expandable string (e.g., "%windir%\\calc.exe") 
A string 

REG_MULTI_SZ 
An array of strings 
A VBArray of strings 

如果一個字符串,在空間上分割(給你一個字符串數組)。最低有效位是2^0,2^1,...,2^7。


編輯


正常的方式,但不是唯一的方式,來存儲密碼,是轉儲它在註冊表中。

閱讀它給你一個數組,而不是一個標量變量。所以...

第二種方法處理存儲在文件中的情況。

4

如果您正在處理字節數組,您必須先知道字符編碼,然後才能將其轉換爲字符串。沒有這些知識,字節將被轉換爲錯誤的字符。

ADODB.Stream object可以處理字節數組。這裏是一個函數,做的是:

Const adTypeBinary = 1 
Const adTypeText = 2 
Const adModeReadWrite = 3 

Function BytesToString(bytes, charset) 
    With CreateObject("ADODB.Stream") 
     .Mode = adModeReadWrite 
     .Type = adTypeBinary 
     .Open 
     .Write bytes 
     .Position = 0 
     .Type = adTypeText 
     .Charset = charset 
     BytesToString = .ReadText 
    End With 
End Function 

這裏是如何使用它:

MsgBox BytesToString(binary, "Windows-1252") 

爲了完整起見,這是反向操作:

Function StringToBytes(str, charset) 
    With CreateObject("ADODB.Stream") 
     .Mode = adModeReadWrite 
     .Type = adTypeText 
     .Charset = charset 
     .Open 
     .WriteText str 
     .Position = 0 
     .Type = adTypeBinary 
     StringToBytes = .Read 
    End With 
End Function 

由於您的輸入似乎是字符串"00110001 00110010 00110011 00110100",她e是將其轉換成一個字節數組,然後你就可以用BytesToString()使用上面的函數:

Function BinaryStringToBytes(binaryStr) 
    Dim b, n, i, l 

    l = GetLocale 
    SetLocale 1031 

    With CreateObject("ADODB.Stream") 
     .Mode = adModeReadWrite 
     .Charset = "Windows-1252" 
     .Type = adTypeText 
     .Open 
     For Each b In Split(binaryStr, " ") 
      If Len(b) <> 8 Or Replace(Replace(b, "0", ""), "1", "") <> "" Then 
       ' invalid procedure call or argument 
       Err.Raise 5, "BinaryStringToBytes", _ 
        "Only stings of 8-blocks of 0s and 1s, " & _ 
        "separated by a single space are accepted." 
      End If 
      n = 0 
      For i = 0 To 7 
       n = n + Mid(b, 8 - i, 1) * 2^i 
      Next 
      .WriteText Chr(n) 
     Next 
     .Position = 0 
     .Type = adTypeBinary 
     BinaryStringToBytes = .Read 
    End With 

    SetLocale l 
End Function 

使用

Dim input, output 

input = "00110001 00110010 00110011 00110100" 
output = BytesToString(BinaryStringToBytes(input), "Windows-1252") 

MsgBox output ' -> "1234" 

而且,更重要的是,它能夠正確處理多字節編碼:

input = "00110001 00110010 00110011 00110100 11000011 10100100" 
output = BytesToString(BinaryStringToBytes(input), "UTF-8") 

MsgBox output ' -> "1234ä" 
相關問題