AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Base64 case insensitive

Ein Thema von shmia · begonnen am 5. Jul 2010 · letzter Beitrag vom 5. Jul 2010
Antwort Antwort
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#1

Base64 case insensitive

  Alt 5. Jul 2010, 17:37
Ich kodiere einen String mit Base64.
Nach dem Speichern kann ich nicht mehr zwischen Groß- und Kleinschreibung unterscheiden.
Gibt es ein alternatives Alphabet für Base64, bei dem die Buchstaben 'a' bis 'z' durch 26 andere Zeichen (!$%&/()=? usw.) ersetzt sind?
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 
#2

AW: Base64 case insensitive

  Alt 5. Jul 2010, 17:46
Base64 bedeutet nur, daß "es auf Basis von 64 Zeichen" kodiert ist.
Der Zeichensatz ist dabei grundsätzlich egal.

Bei "guten" Funktionen/Klassen, welche nach Base64 umkodieren, kann man den Zeichensatz angeben.
Allerdings hast du ja nicht gesagt, was du derzeit dafür nutzt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Base64 case insensitive

  Alt 5. Jul 2010, 17:46
Base32?
Natürlich kannst du auch für Base64 einen Encoder schreiben, der nicht das Standard-Alphabet benutzt, wenn du eine höhere Packeffizienz erreichen willst. Aber viel Spaß dabei, 32 Sonderzeichen zu finden, die du benutzen kannst
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 
#4

AW: Base64 case insensitive

  Alt 5. Jul 2010, 17:55
Warum nicht gleich Base16 aka Hexadezimal

Base64 selber hat kein Alphabet ... es wird nur oftmals das Eine bekannte verwendet, aber es gibt einige Kodierungen, welche einen anderen Zeichensatz verwenden, wobei sich bisher alle, welche ich so kenne, in 0-9a-zA-Z gleichen und nur die restlichen 2 Zeichen unterscheiden, sowie bei dem einen Zusatzzeichen (welches für eine "ungerade" Byteanzahl die zuviel kodierten Bytes kennzeichnen)

MIME-Encode nee, MIME war's nicht, aber egal (ich hoffe ich verwechel das grade nicht schonwieder, da es für URLs entworfen wurde) kann das dort Base64 verwendete "/" nicht nutzen, da es in URLs Probleme bereiten könnte
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 5. Jul 2010 um 18:01 Uhr)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

AW: Base64 case insensitive

  Alt 5. Jul 2010, 18:00
Bei "guten" Funktionen/Klassen, welche nach Base64 umkodieren, kann man den Zeichensatz angeben.
"Meine" Base64 hält sich an den RFC-Standard.
Dass ich den Vorrats von 64 (+1 für Endekennung) Zeichen umdefinieren kann ist klar.
Bei Decodieren muss dies natürlich wieder rückgängig gemacht werden.

Mir geht es darum zu fragen ob sich schon mal jemand die Mühe gemacht hat, die Kleinbuchstaben durch andere Zeichen zu ersetzen.

Bin jetzt gerade fündig geworden:
Code:
 /**
  * This array is a lookup table that translates 6-bit positive integer
  * index values into their "Base64 Alphabet" equivalents as specified
  * in Table 1 of RFC 2045.
  */
  private static final char intToBase64[] = {
     'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
     'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
     'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
     'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
     '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'
  };
 
  /**
   * This array is a lookup table that translates 6-bit positive integer
   * index values into their "Alternate Base64 Alphabet" equivalents.
   * This is NOT the real Base64 Alphabet as per in Table 1 of RFC 2045.
   * This alternate alphabet does not use the capital letters. It is
   * designed for use in environments where "case folding" occurs.
   */
   private static final char intToAltBase64[] = {
      '!', '"', '#', '$', '%', '&', '\'', '(', ')', ',', '-', '.', ':',
      ';', '<', '>', '@', '[', ']', '^', '`', '_', '{', '|', '}', '~',
      'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
      'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
      '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '?'
   };

Warum nicht gleich Base16 aka Hexadezimal
Base16, Base32 & Base36 brauchen mir zu viel Platz.
Andreas

Geändert von shmia ( 5. Jul 2010 um 18:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 
#6

AW: Base64 case insensitive

  Alt 5. Jul 2010, 18:05
Warum geht denn die Groß/Kleinschreibung verloren?

Grundsätzlich hast du etwa 96 Zeichen in ASCII und 223 in ANSI zur Verfügung, wobei es bei ANSI auch wieder einige Zeichen mit Groß/Kleinschreibung gibt und sich dieses auch noch je nach Codepage ändern kann.

96 - 26 (Groß- oder Kleinbuchstaben) = 70, was wohl ausreichen sollte, so daß du dich nur noch entscheiden mußt, welche 6 Zeichen du nicht magst.


[add]
hier eine Auswahl:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`{|}~
!"#$%&'()*+,-./0123456789:;<=>?@[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
mußt nur noch 4 Zeichen rauslöschen und schon hast du deinen Zeichensatz.

[add]
Zitat:
brauchen mir zu viel Platz.
hab noch irgendwo eine Base128 ^^
und eine Base256 wäre auch ganz schnell gebaut (CopyMemory ), aber diese hätte dann wieder dein Groß-/Kleinschreibungsproblemchen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 5. Jul 2010 um 18:13 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz