Hej! Sök på dessa ord i tips & tricks så borde du finna rutiner för samliga konverteringar. Base64 gör ju 3 bitar av 2 eftersom den omvandlar asc 254 till 128 så där måste du först återställa strängen till ursprunget. När väl det är klart så är det nog inga problem att fortsätta konverteringen. Jag fattar inte riktigt. En sträng som är av typen base64 är större än en sträng som inte är av typen Base64. Detta beror på att var annan bytes så läggs en tredje på för att göra om alla ascII-tecken över 128 så de inte strular till den när det skickas över nätet, eller som det började genom email för att inte förändra utsprungsdokumentet.Binärt, HEX och Base64...
Jag har ett 28 byte långt Base64 värde, detta vill jag konvertera till ett 20 byte långt binärt värde. För att sedan hexxa detta till 40 byte.
Hur gör jag detta lättast?Sv: Binärt, HEX och Base64...
Sv: Binärt, HEX och Base64...
Jag har ett Base64 värde som ser ut såhär:
<code>
AAABAwgkBpcEgJlAhyQGAAAAAAA= '28 bytes
</code>
Kan jag konvertera detta binärt till 20 bytes utan att decoda base64:an?Sv: Binärt, HEX och Base64...
Så det du får börja med är att dekryptera din base64-sträng så du vet vad som står och därefter klippa det om det skulle behövas. Om du kör decode på det du angav så får du följande sträng binärt. Sen är det så att den faktiskt är 20 tecken lång.
<code>
$—€™@‡$
</code>
Testa denna vb6-kod:
<code>
Const base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
Private Sub Form_Load()
Text = base64_decode("AAABAwgkBpcEgJlAhyQGAAAAAAA=")
Debug.Print Text
Debug.Print Len(Text)
End Sub
Function base64_encode(DecryptedText As String) As String
Dim c1, c2, c3 As Integer
Dim w1 As Integer
Dim w2 As Integer
Dim w3 As Integer
Dim w4 As Integer
Dim n As Integer
Dim retry As String
For n = 1 To Len(DecryptedText) Step 3
c1 = Asc(Mid$(DecryptedText, n, 1))
c2 = Asc(Mid$(DecryptedText, n + 1, 1) + Chr$(0))
c3 = Asc(Mid$(DecryptedText, n + 2, 1) + Chr$(0))
w1 = Int(c1 / 4)
w2 = (c1 And 3) * 16 + Int(c2 / 16)
If Len(DecryptedText) >= n + 1 Then w3 = (c2 And 15) * 4 + Int(c3 / 64) Else w3 = -1
If Len(DecryptedText) >= n + 2 Then w4 = c3 And 63 Else w4 = -1
retry = retry + mimeencode(w1) + mimeencode(w2) + mimeencode(w3) + mimeencode(w4)
Next
base64_encode = retry
End Function
Function base64_decode(a As String) As String
Dim w1 As Integer
Dim w2 As Integer
Dim w3 As Integer
Dim w4 As Integer
Dim n As Integer
Dim retry As String
For n = 1 To Len(a) Step 4
w1 = mimedecode(Mid$(a, n, 1))
w2 = mimedecode(Mid$(a, n + 1, 1))
w3 = mimedecode(Mid$(a, n + 2, 1))
w4 = mimedecode(Mid$(a, n + 3, 1))
If w2 >= 0 Then retry = retry + Chr$(((w1 * 4 + Int(w2 / 16)) And 255))
If w3 >= 0 Then retry = retry + Chr$(((w2 * 16 + Int(w3 / 4)) And 255))
If w4 >= 0 Then retry = retry + Chr$(((w3 * 64 + w4) And 255))
Next
base64_decode = retry
End Function
Private Function mimeencode(w As Integer) As String
If w >= 0 Then mimeencode = Mid$(base64, w + 1, 1) Else mimeencode = ""
End Function
Private Function mimedecode(a As String) As Integer
If Len(a) = 0 Then mimedecode = -1: Exit Function
mimedecode = InStr(base64, a) - 1
End Function
</code>
Om du använder dig av asp/vb.net så finns samma funktion i crypt-classen:
<code>
Public Function DecodeBase64(ByVal String base64string) As Byte()
</code>