Hi
Diesmal mit neuem Thread.
Das Problem was ich habe ist, es muss unter jeder shell laufen, (tcsh sowie bash) und programme wie bc stehen auch nicht zur verfuegung.
cu -| nando
Hi Nando,
On Mon, Nov 05, 2001 at 21:36:20 +0100, Nando Koerner wrote:
Das Problem was ich habe ist, es muss unter jeder shell laufen, (tcsh sowie bash) und programme wie bc stehen auch nicht zur verfuegung.
Schonmal expr versucht?
a=$(expr 4 + 5)
bzw.
a=`expr 2 * 6`
Macht aber AFAIK nur Integerarithmetik.
bye, Chris
Once upon a time, I heard Christian Perle say:
Schonmal expr versucht?
Da es in /usr/bin liegt, ist es sicherlich shell-unabhängig, aber auch wieder ein extra Programm, was er ja eigentlich nicht haben will.
Das Problem was ich habe ist, es muss unter jeder shell laufen, (tcsh sowie bash) und programme wie bc stehen auch nicht zur verfuegung.
Die anderen Lösungen, die gekommen sind sind aber entweder shell- abhängig oder brauchen auch wieder extra Programme (die eigentlich wie bc oder expr standardmäßig installiert sind). Versuche doch mal, das Geheimnis zu lüften... was willst Du konkret tun?
hej så länge.
On Mon, Nov 05, 2001 at 10:18:48PM +0100, Stefan Berthold wrote:
Die anderen Lösungen, die gekommen sind sind aber entweder shell- abhängig oder brauchen auch wieder extra Programme (die eigentlich wie bc oder expr standardmäßig installiert sind). Versuche doch mal, das Geheimnis zu lüften... was willst Du konkret tun?
Eben. Nandos Wunsch ist in etwa so wie die Frage nach einem Programm helloworld, daß sowohl in C als auch in Fortran und Pascal funktioniert.
Reinhard
Lüftung des Geheimnisses !
Ich bin dabei ein Kryptoscript zu schreiben, was eine datei beim reinpipen verschluesselt und danch abspeichert und dementsprechend wieder entschluesselt werden kann. Ich moechte dabei nicht auf vorhandene Tools zurueckgreifen , sondern eigene Erfahrungen damit machen, schliesslich ist ja auch eine gehoerige Portion Spass dabei. Und es soll keine oder sowenig wie moeglich Abhaengigkeiten geben, damit es auf eine Diskette passt und auf jedem Linuxrechner lauffaehig ist.
Ich hoffe ihr versteht mich. *g
mfg -|nanDo
Hi Nando,
On Tue, Nov 06, 2001 at 09:22:42 +0100, Nando Koerner wrote:
Ich bin dabei ein Kryptoscript zu schreiben, was eine datei beim reinpipen verschluesselt
Vercrypten mit der Shell? Das wird aber ziemlich lahm :) Oder machst Du nur so ne "Wurstverschluesselung" mit Ersetzungstabellen (tr & Co.)?
Ich moechte dabei nicht auf vorhandene Tools zurueckgreifen , sondern
Bei der Shellprogrammierung ruft man oft externe Kommandos auf. Wenn Du ausschliesslich mit shellinternen Mitteln arbeiten willst, dann kommst Du mit der bash IMHO am besten zurande.
Und es soll keine oder sowenig wie moeglich Abhaengigkeiten geben, damit es auf eine Diskette passt und auf jedem Linuxrechner lauffaehig ist.
Nimm bash. *g*
bye, Chris
On Tue, Nov 06, 2001 at 10:04:54AM +0100, Christian Perle wrote:
On Tue, Nov 06, 2001 at 09:22:42 +0100, Nando Koerner wrote:
Hi ihr zwei,
Ich bin dabei ein Kryptoscript zu schreiben, was eine datei beim reinpipen verschluesselt
Hast du dich schon für ein Kryptoverfahren entschieden? Damit könnte man dann sagen, ob es in der shell machbar ist. Mit richtig großen Zahlen kann eine Shell z.B. nicht rumrechnen.
Vercrypten mit der Shell? Das wird aber ziemlich lahm :)
Oder machst Du nur so ne "Wurstverschluesselung" mit Ersetzungstabellen (tr & Co.)?
hehe, mach rot13 nicht schlecht
Reinhard
Am Dienstag, dem 06. November 2001 um 10:42:14, schrieb Reinhard Foerster:
Hast du dich schon für ein Kryptoverfahren entschieden? Damit könnte man dann sagen, ob es in der shell machbar ist. Mit richtig großen Zahlen kann eine Shell z.B. nicht rumrechnen.
Mal grob vereinfacht: symmetrische sollten gehen, asymmetrische eher nicht, oder? Wie sieht es mit Hashfunktionen aus? Auf jeden Fall sollte Solitaer gehen und eine Shellimplementierung fehlt tatsaechlich noch:
http://www.counterpane.com/solitaire.html
Laecherlich langsam wird bestimmt alles, was auch sicher sein soll.
BTW, debians perl-base koennte man mit Kompression auf eine Diskette bekommen:
$ dpkg -s perl-base Package: perl-base Installed-Size: 1472 Version: 5.6.1-5 Description: The Pathologically Eclectic Rubbish Lister. A scripting language with delusions of full language-hood, Perl is used in many system scripts and utilities. . This is a stripped down Perl with only essential libraries. To make full use of Perl, you'll want to install the `perl', `perl-modules' and optionally `perl-doc' packages which supplement this one. ...
Damit haette man es vermutlich leichter.
Torsten
On Tue, Nov 06, 2001 at 11:00:56AM +0100, Torsten Werner wrote:
BTW, debians perl-base koennte man mit Kompression auf eine Diskette bekommen:
Zielplattform von Nado waren alle Linuxrechner. Da perl-base binaries enthält legt man sich damit auf einen Rechnertyp (z.b. i386) fest. Dann kann man allerdings auch gleich das Kryptoprogramm in C schreiben und compilieren. Das passt besser auf einen Diskette :)
Reinhard
On Tue, Nov 06, 2001 at 11:00:56AM +0100, Torsten Werner wrote:
Am Dienstag, dem 06. November 2001 um 10:42:14, schrieb Reinhard Foerster:
Hast du dich schon für ein Kryptoverfahren entschieden? Damit könnte man dann sagen, ob es in der shell machbar ist. Mit richtig großen Zahlen kann eine Shell z.B. nicht rumrechnen.
Mal grob vereinfacht: symmetrische sollten gehen, asymmetrische eher nicht, oder?
Mmh, auf den ersten Blick dachte ich das auch. So einfach ist das trotzdem nicht. Man muß beachten, das die Operationen meist mit 32 bittigen Binärworten erfolgen müssen. Diese muß man mindestens (für RC5) Addieren, Subtrahieren, XORen und Rechtsrotieren können. Da die Shell mit binärworten nichts anfangen kann, muß man sie wohl in die ACCSI-Darstellung wandeln (wie macht man das in bash?). Dann geht + - ^ und über Zwischenschritte auch <<<
Wie sieht es mit Hashfunktionen aus?
Wenn obiges RC5 geht bekommt man auch md5 hin. Zusätzlich ist nur eine (mini-)Multiplikation und ODER nötig.
Solitaer gehen und eine Shellimplementierung fehlt tatsaechlich noch:
ui, wozu Spielkarten doch so alles nützlich sind.
Reinhard
Hi Reinhard,
On Tue, Nov 06, 2001 at 17:23:05 +0100, Reinhard Foerster wrote:
Mmh, auf den ersten Blick dachte ich das auch. So einfach ist das trotzdem nicht. Man muß beachten, das die Operationen meist mit 32 bittigen Binärworten erfolgen müssen. Diese muß man mindestens (für RC5) Addieren, Subtrahieren, XORen und Rechtsrotieren können. Da die Shell mit binärworten nichts anfangen kann, muß man sie wohl in die ACCSI-Darstellung wandeln (wie macht man das in bash?). Dann geht + - ^ und über Zwischenschritte auch <<<
Such mal in der Manpage zu bash nach "ARITHMETIC EVALUATION", da wirst Du fuendig. In bash funktioniert z.B.:
echo $[1<<4] (left bitwise shift)
echo $[49152^16385] (bitwise XOR)
echo $[10&9] (bitwise AND)
echo $[0x100|0x3f] (bitwise OR, Operanden hexadezimal)
Es geht also schon einiges, sogar mit bash 1.14. Rechtsrotieren muesste man mit maskieren und links schieben emulieren koennen.
bye, Chris
Am Dienstag, dem 06. November 2001 um 17:44:14, schrieb Christian Perle:
Es geht also schon einiges, sogar mit bash 1.14.
Das Problem mit der Konvertierung nach ASCII hat man immer noch, aber es ist loesbar: Mittels
read -n 1 var
kann man einen stream in einzelne Binaerzeichen zerlegen und dann mit
case $var in "\x0") var=0;; "\x1") var=1;; "\x2") var=2;; ... "\xff") var=255;; esac
in ASCII konvertieren. Ist ungetestet und sieht ziemlich albern aus. :)
Torsten
On Tue, Nov 06, 2001 at 06:19:48PM +0100, Torsten Werner wrote:
Das Problem mit der Konvertierung nach ASCII hat man immer noch, aber es ist loesbar: Mittels
read -n 1 var
kann man einen stream in einzelne Binaerzeichen zerlegen und dann mit
case $var in "\x0") var=0;; "\x1") var=1;; "\x2") var=2;; ... "\xff") var=255;; esac
in ASCII konvertieren. Ist ungetestet und sieht ziemlich albern aus. :)
ROFL!!!! Mein posting hätte ich mir gerade sparen können. Aber so klappt es noch nicht.
Reinhard
Am Dienstag, dem 06. November 2001 um 19:25:07, schrieb Reinhard Foerster:
ROFL!!!! Mein posting hätte ich mir gerade sparen können. Aber so klappt es noch nicht.
8bit input scheint tatsaechlich nicht zu funktionieren, tja schade.
Torsten
Hi Torsten,
On Tue, Nov 06, 2001 at 18:19:48 +0100, Torsten Werner wrote:
read -n 1 var
read -n 1 x bash: read: illegal option: -n read: usage: read [-r] [-p prompt] [-a array] [-e] [name ...]
Welche bash-Version hast Du da?
bye, Chris
On Tue, Nov 06, 2001 at 08:16:44PM +0100, Christian Perle wrote:
Hi Torsten,
On Tue, Nov 06, 2001 at 18:19:48 +0100, Torsten Werner wrote:
read -n 1 var
read -n 1 x bash: read: illegal option: -n read: usage: read [-r] [-p prompt] [-a array] [-e] [name ...]
Welche bash-Version hast Du da?
2.05 nehme ich. Das read funktioniert jedenfalls. Umwandlung ohne od habe ich noch keine gefunden.
rf11@max:~/tmp> cat x #!/bin/bash read -n 1 byte echo $byte|od -h rf11@max:~/tmp> ./x </bin/ls 0000000 0a7f 0000002 rf11@max:~/tmp>
die 7f ist das gesuchte erste byte
Reinhard
bye, Chris -- Christian Perle perle@itm.tu-clausthal.de Grunaer Str. 31 http://www.itm.tu-clausthal.de/~perle/ 01069 Dresden LinuxGuitarKitesBicyclesBeerPizzaRaytracing
Lug-dd maillist - Lug-dd@schlittermann.de http://mailman.schlittermann.de/mailman/listinfo/lug-dd
On Tue, Nov 06, 2001 at 08:32:32PM +0100, Reinhard Foerster wrote:
Meine beste Lösung bisher für das erste Byte als Hexzahl:
#!/bin/bash read -n 1 byte var=Ox$(echo -n $byte|od -An -tx1|sed s/^.//) echo ---${var}---
rf11@max:~/tmp> ./x </bin/ls ---Ox7f--- rf11@max:~/tmp>
die --- um eventuelle Leerzeichen davor und danach zu sehen
Nun noch optimieren...
Reinhard
Am Dienstag, dem 06. November 2001 um 21:01:49, schrieb Reinhard Foerster:
#!/bin/bash read -n 1 byte var=Ox$(echo -n $byte|od -An -tx1|sed s/^.//) echo ---${var}---
Hier werden aber zwei externe Binaries benoetigt: od und sed. Wenn man die voraussetzen kann, dann gibt es sicher eine Loesung.
var=`cat /bin/ls` echo ${#var} ls -l /bin/ls
liefert unterschiedliche Groessen.
Interessant ist auch die Ausgabe von
var=$'\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff' echo -e ${var} | od -tx1 -Ax2
Das Zeichen \x00 geht gar nicht.
Torsten
On Tue, Nov 06, 2001 at 10:10:00PM +0100, Torsten Werner wrote:
Hier werden aber zwei externe Binaries benoetigt: od und sed. Wenn man die voraussetzen kann, dann gibt es sicher eine Loesung.
Ja. sed kann man weglassen, od brauche ich noch:
while read -n 1 byte; do var=$(echo -n $byte|od -An -tu1) var=${var## } #printf '%0.3u = Ox%0.2x\n' $var $var printf '%c' $var done
soll einfach ein File byteweise kopieren. Das Einlesen klappt. Das rausschreiben mit printf geht schief.
var=`cat /bin/ls` echo ${#var} ls -l /bin/ls
liefert unterschiedliche Groessen.
ich denke, daß beim cat sowas wie tab und backspace interpretiert wird und somit die Länge von $var anders ist.
Interessant ist auch die Ausgabe von
var=$'\x01\x02\x03\x04\x05\x06... echo -e ${var} | od -tx1 -Ax2
Das Zeichen \x00 geht gar nicht.
Wirklich seltsam: 000000 01 02 03 04 05 06 07 08 20 0b 0c 0d 0e 0f 10 11 bis 08 ist alles ok, dann geht der Ärger los. 08=backspace 09=tab Ich denke mal in $var steht das richtige drin aber das echo versaut irgendwas. Wenn du "od -tx1 -Ax2 < file " machst und in dem file diese 255 Bytes drin sind klappt es. Mit echo und cat müssen wir also sehr vorsichtig sein.
Reinhard
Hi Reinhard,
On Tue, Nov 06, 2001 at 23:07:49 +0100, Reinhard Foerster wrote:
var=`cat /bin/ls`
ich denke, daß beim cat sowas wie tab und backspace interpretiert wird und somit die Länge von $var anders ist.
An cat wird es nicht liegen, sonst wuerde binaeres Zusammenfuegen von mehreren Dateien nicht immer funktionieren:
$ ls -l /bin/ls -rwxr-xr-x 1 root root 40848 Mar 1 2001 /bin/ls
$ cat /bin/ls /bin/ls > lsx2 $ ls -l lsx2 -rw-r--r-- 1 chris chris 81696 Nov 7 11:12 lsx2
Das Problem wird die Shell sein, die via `cat /bin/ls` den Binaerkram temporaer auf der Kommandozeile hat. In dem Moment werden wahrscheinlich Backspace & Co. interpretiert. Moeglicherweise hilft ein vorangestelltes IFS="" oder var="`cat /bin/ls`".
bye, Chris
Am Mittwoch, dem 07. November 2001 um 11:32:46, schrieb Christian Perle:
Moeglicherweise hilft ein vorangestelltes IFS="" oder var="`cat /bin/ls`".
Noe, damit wird es noch schlimmer.
Torsten
Am Dienstag, dem 06. November 2001 um 20:16:44, schrieb Christian Perle:
Welche bash-Version hast Du da?
2.05.0(1)-release
Auch grosse Zahlen sind mit bash only erschlagbar. Mit folgenden Script lassen sich 2 lange integer addieren:
a1=12345678901234567890 a2=55555 echo -n "$a1 + $a2 = " while [ "$a1$a2" ]; do b1=${a1:((${#a1}-1))} a1=${a1:0:((${#a1}-1))} b2=${a2:((${#a2}-1))} a2=${a2:0:((${#a2}-1))} let sumb=${b1:-0}+${b2:-0}+${ueb:-0} if ((sumb>9)) then ueb=1 sumb=${sumb:1} else ueb=0 fi sum="$sumb$sum" done echo $sum
Auf Nandos komplettes Script bin ich gespannt...
Nochmal Solitair: Den damit im Zusammenhang stehende Roman `Cryptonomicon' von Neal Stephenson verleihe ich auch gern - ist in englischer Sprache und ca. 1 kg schwer und sehr lesenswert! Leseprobe gibt es auch im WWW.
Torsten
On Tue, Nov 06, 2001 at 05:44:14PM +0100, Christian Perle wrote:
kann, muß man sie wohl in die ACCSI-Darstellung wandeln (wie macht man das in bash?). Dann geht + - ^ und über Zwischenschritte auch <<<
Such mal in der Manpage zu bash nach "ARITHMETIC EVALUATION", da wirst Du fuendig. In bash funktioniert z.B.:
echo $[1<<4] (left bitwise shift)
echo $[49152^16385] (bitwise XOR)
echo $[10&9] (bitwise AND)
echo $[0x100|0x3f] (bitwise OR, Operanden hexadezimal)
Es geht also schon einiges, sogar mit bash 1.14. Rechtsrotieren muesste man mit maskieren und links schieben emulieren koennen.
mmh, genau das hab ich oben geschrieben. Danke für die Wiederholung :)
Das einzige was mir noch felte war die Umwandlung der Eingabe in eine ASCII-Darstellung als Dezimalzahl oder Hexzahl
Beispiel: ich will /bin/ls verschlüsseln, also starte ich mein Programm so:
$mein_crypt_skript.sh < /bin/ls > bin-ls.bin
Soweit ist das sicher klar. jetzt mein Problem:
$ od -h /bin/ls 0000000 457f 464c 0101 0001 0000 0000 0000 0000 ...
ls geht also mit 0x457f464c los. Dieses 0x457f464c muß also erstmal in eine shellvariable gelangen (oder meinetwegen nur ein einzelne bytes). Das erste Byte lese ich mit "read -n 1 foo" ein. Wie mache ich dann aus dem Inhalt von $foo die Zeichenkette "0x45" um mit ihr rechnen zu können?
Hoffentlich war das jetzt verständlich...
Reinhard
man das irgendwie mit bashinterna lösen?
bye, Chris -- Christian Perle perle@itm.tu-clausthal.de Grunaer Str. 31 http://www.itm.tu-clausthal.de/~perle/ 01069 Dresden LinuxGuitarKitesBicyclesBeerPizzaRaytracing
Lug-dd maillist - Lug-dd@schlittermann.de http://mailman.schlittermann.de/mailman/listinfo/lug-dd
On Mon, Nov 05, 2001 at 09:36:20PM +0100, Nando Koerner wrote:
Das Problem was ich habe ist, es muss unter jeder shell laufen, (tcsh sowie bash) u
Wieso tcsh und bash? Du musst doch irgendwo immer angeben, welche shell das skript letztendlich ausführen soll. Im Zweifelsfalle immer /bin/sh.
btw: Du kennst http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/ ?
Reinhard
On Mon, Nov 05, 2001 at 09:36:20PM +0100, Nando Koerner wrote:
Hi
Diesmal mit neuem Thread.
Das Problem was ich habe ist, es muss unter jeder shell laufen, (tcsh sowie bash) und programme wie bc stehen auch nicht zur verfuegung.
Auf irgendwas musst du aufbauen. Selbst wenn du es in C schreibst, brauchst du einen Compiler. Die Bash, Perl, Python sind fast überall vorhanden.
thomas
lug-dd@mailman.schlittermann.de