Convert String to Byte etc...

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
12 Beiträge • Seite 1 von 1
12 Beiträge Seite 1 von 1

Convert String to Byte etc...

Beitrag von stony007_de (Specialist / 108 / 6 / 0 ) »
Hi
Ich habe mal wieder eine Anforderung welche mir Kopfzerbrechen bereitet.
Ich muss einen String modifizieren.
Zuerst muss ein String zu Byte gewandelt werden.
Dann für den Byte Wert einen SHA1 Hash erstellen
Aus diesem sha1 Hash als Byte muss dann in hex gewandelt werde..

Stränge ich weiß, aber ich wüsste gern ob es überhaupt mit abap Mitteln möglich ist.
Im Moment hab ich es mit .net realisiert.
Im Idealfall würde ich es gern im SAP integriert haben.

Im .net hab ich es wie folgt realisiert.

Code: Alles auswählen.

//setzten von variable "strText"
string strText ="Test081520130101";

// UTF-8 Umwandeln strText zu Byte
byte[] utf8Bytes = GetUtf8Bytes(strText);

// Encrypt mit SHA1
byte[] sha1Hash = ComputeSHA1Hash(utf8Bytes);

// Konvertieren jeden Byte byte in einen hexadecimal String
string accessKey = ByteArrayToHexString(sha1Hash);
Über ne Antwort wäre ich sehr dankbar...

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Convert String to Byte etc...

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Hi!

cl_abap_conv_in_ce und cl_abap_conv_out_ce sind die beiden Klassen für das Umwandeln von Byte bzw. in Byte.
CALCULATE_HASH_FOR_CHAR wandelt einen String in den Hashwert um. SHA1, SHA2 und MD5 werden glaub ich unterstützt.
Es dürfte aber auch eine CALCULATE_HASH_FOR_RAW oder so ähnlich geben.

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Convert String to Byte etc...

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
a-dead-trousers hat geschrieben:CALCULATE_HASH_FOR_CHAR
Einer meiner ganz speziellen Freunde weil eine Doku zu dem FuBa vorhanden ist. Aber nur wenn man auf deutsch angemeldet ist *sigh*
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Convert String to Byte etc...

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
black_adept hat geschrieben:
a-dead-trousers hat geschrieben:CALCULATE_HASH_FOR_CHAR
Einer meiner ganz speziellen Freunde weil eine Doku zu dem FuBa vorhanden ist. Aber nur wenn man auf deutsch angemeldet ist *sigh*
Oder man geht ueber die SE61:

Code: Alles auswählen.

Document Class       Function module and parameter
Language             German


Function Module      CALCULATE_HASH_FOR_CHAR
Parameters

Re: Convert String to Byte etc...

Beitrag von stony007_de (Specialist / 108 / 6 / 0 ) »
vielen dank für die Antworten

Ich bin gerade am versuche die FuBa's zu verstehen.
Im ersten von CHAR (UTF8) zu BYTE
z.B CHAR = "TEST" --> = --> BYTE "01010100 01000101 01010011 01010100"

Bin mir gerade nicht sicher ob ich die richtigen Datentypen nutze.
endian = Byte?

Code: Alles auswählen.

 DATA: text(100) TYPE C VALUE 'TEST', int TYPE I VALUE 258.
 DATA: buffer TYPE XSTRING, conv TYPE REF TO cl_abap_conv_out_ce.
 conv = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' endian = 'L' ).
 CALL METHOD conv->write( data = text n = 4 ).
 CALL METHOD conv->write( data = int ).
 buffer = conv->get_buffer( ).
 WRITE buffer.
Das Ergebnis zeigt mir "5445535402010000"?
Jemand einen Tip?

Wäre dann nicht CL_ABAP_CONV_X2X_CE die richtige Funktion?

Re: Convert String to Byte etc...

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
hi!
stony007_de hat geschrieben:BYTE "01010100 01000101 01010011 01010100"
Das ist BIT und nicht BYTE.

Versuchs mal damit:

Code: Alles auswählen.

conv->convert( exporting data = text importing buffer = buffer ).
Endian:
http://stackoverflow.com/questions/7016 ... byte-order

Wenn ich dein Ergebnis "5445535402010000" (=HEX und nicht BIN) durch den "Translator" laufen lasse kommt "Test" heraus. Also funktionierts.
http://home.paulschou.net/tools/xlate/

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Convert String to Byte etc...

Beitrag von stony007_de (Specialist / 108 / 6 / 0 ) »
Hi adt

so richtig schlau bin ich leider aus deinem Tip nicht geworden. ;-(
Versuch mich gerade an solchen Code Schnippsel herran zu arbeiten.

Ist es vielleicht möglich die kompletten Funktion zu posten?
das würde mit ungemein beim Verständnis helfen.

vg
stony007_de

Re: Convert String to Byte etc...

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Hi!

Mein "Beispiel" bezog sich auf deinen eigenen Code:

Code: Alles auswählen.

 DATA: text(100) TYPE C VALUE 'TEST', int TYPE I VALUE 258.
 DATA: buffer TYPE XSTRING, conv TYPE REF TO cl_abap_conv_out_ce.
 conv = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' endian = 'L' ).
* CALL METHOD conv->write( data = text n = 4 ). <-- Die "gesuchten" 54455354
* CALL METHOD conv->write( data = int ). <-- Zusätzliche 02010000
* buffer = conv->get_buffer( ).
 conv->convert( exporting data = text importing buffer = buffer ).
 WRITE buffer.
Ergebnis: 54 45 53 54 (HEX) = 01010100 01000101 01010011 01010100 (BIN)
stony007_de hat geschrieben:Das Ergebnis zeigt mir "5445535402010000"?
Die zusätzlichen 02010000 kommen von dem INT das du ebenfalls auf den Ausgabebuffer geschrieben hast. (Ich hab das in deinem Code mal markiert)

Ich persönlich hab bislang nur die CONVERT-Methode benutzt, daher auch meine Empfehlung diese mal auszuprobieren. Da ich mir auch nicht sicher war, wie und ob die WRITE-Methode funktioniert. Aber offensichtlich funktioniert sie. :P

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Convert String to Byte etc...

Beitrag von stony007_de (Specialist / 108 / 6 / 0 ) »
Hab das gearde mal versucht
als Ergebnis erhalte ich nun :

Code: Alles auswählen.

54455354202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020


das ist noch nicht so richtig mein Ziel. Wie schon gesagt, meine Buffer Variable soll ein 1. Step den BIN Wert enthalten.

*** EDIT ***
Ich hab noch was gefunden. Ich convertiere den HEX Code im nachhinein.

mein Code sieht jetzt wie folgt aus:

Code: Alles auswählen.

*Text zum wandeln
 DATA: text(100) TYPE C VALUE 'TEST'.         

* Variable welche gefüllt wird
 DATA: buffer TYPE XSTRING, conv TYPE REF TO cl_abap_conv_out_ce.
 
 conv = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' endian = 'L' ).
 CALL METHOD conv->write( data = text n = 4 ).
 conv->convert( exporting data = text importing buffer = buffer ).
 buffer = conv->get_buffer( ).
 
data: b(1) type n,
l_bin type string.

DO.
GET BIT sy-index OF buffer INTO b.
IF sy-subrc <> 0. EXIT. ENDIF.
  CONCATENATE l_bin b INTO l_bin.
  CONDENSE l_bin NO-GAPS.
ENDDO.
write:  l_bin.
jetzt geht es drum, den SHA1 zu ziehen. ;-)

Re: Convert String to Byte etc...

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
stony007_de hat geschrieben:Hab das gearde mal versucht
als Ergebnis erhalte ich nun :

Code: Alles auswählen.

54455354202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020
Sorry, ja, stimmt. Bei meinem Beispiel hat die Längenangabe gefehlt. TEXT ist ja 100 Zeichen lang und deswegen kommen hinten die ganzen Leerzeichen (20) dazu.
stony007_de hat geschrieben:Ich hab noch was gefunden. Ich convertiere den HEX Code im nachhinein.
...
jetzt geht es drum, den SHA1 zu ziehen. ;-)
hmmm... Du weißt aber schon, dass du mit deinem Code eigentlich wieder einen Text hast und dessen SHA1 entspricht nicht dem den du über den (tatsächlichen) HEX-Wert bekommen würdest.
Wenn das von dir wirklich so gewünscht ist, kannst du den FuBa CALCULATE_HASH_FOR_CHAR verwenden, da du ja wieder einen String hast.
Ansonsten kannst du den FuBa CALCULATE_HASH_FOR_RAW verwenden, um den Hash des ursprünglichen HEX-Wertes zu ermitteln.

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Convert String to Byte etc...

Beitrag von stony007_de (Specialist / 108 / 6 / 0 ) »
Das hab ich gerade mitbekommen. :(
Dann brauche ich schon den "CALCULATE_HASH_FOR_RAW"
Ansonsten kannst du den FuBa CALCULATE_HASH_FOR_RAW verwenden, um den Hash des ursprünglichen HEX-Wertes zu ermitteln.
Bin gerade am suchen welche Werte ich dann in die Funktion übergebe bzw. welche ich dann raus hole. nehm ich dann die Var "buffer"?,

Code: Alles auswählen.

DATA: l_hash type HASH160X.
  call function 'CALCULATE_HASH_FOR_RAW'
    exporting
      alg            = 'SHA1'
      data           = buffer
    importing
      HASH  = l_hash.

Re: Convert String to Byte etc...

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
hi!

ALG = Der gewünschte Algorithmus (Derzeit MD5, SHA1 und SHA2 möglich)
DATA = Der Wert von dem du den Hashwert haben möchtest
LENGTH = Nur wenn die Länge eine Rolle spielt, ansonsten weglassen

Bei MD5 und SHA1:
HASH = Der Hashwert als Zeichenfeld
HASHX = Der Hashwert als HEX

Wenn du längere Hashwerte haben möchtest (z.b. SHA2), musst du die anderen Felder verwenden:
HASHSTRING = Der Hashwert als Zeichenstring
HASHXSTRING = Der Hashwert als HEX-String

HASHB64STRING hat bei mir bislang keine brauchbaren, weil falsche, Werte geliefert.

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Seite 1 von 1

Vergleichbare Themen

10
Antw.
5662
Views
Convert String to PDF
von Johannes9090 » 13.10.2014 17:15 • Verfasst in ABAP® für Anfänger
0
Antw.
1202
Views
2-Byte-Characters
von black_adept » 18.04.2005 14:57 • Verfasst in ABAP® für Anfänger
1
Antw.
1709
Views
Sonderzeichen entfernen byte xml
von mnd » 19.04.2013 15:20 • Verfasst in ABAP® für Anfänger
0
Antw.
6390
Views
23
Antw.
8390
Views
Convert
von Marc K. » 22.08.2012 16:17 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor 7 Stunden von DeathAndPain gelöst 22 / 2906
Daten an Tabelle binden
vor 12 Stunden von Lukas Sanders 2 / 925
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 494

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor 7 Stunden von DeathAndPain gelöst 22 / 2906
Daten an Tabelle binden
vor 12 Stunden von Lukas Sanders 2 / 925
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 494

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2510
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9092