Shell2Shell(Оболочка для оболочки) запуск SD и не только...

Обсуждаются как существующие проекты (перевод документации, информационная система и т.п.), так и создание новых.

Модератор: Модераторы

Re: Shell2Shell(Оболочка для оболочки) запуск SD и не только

Сообщение Alex2013 » 05.10.2024 19:58:19

"Боевой режим "
Фон локальная AUTOMATIC1111 Stable Diffusion Web UI + несколько онлайн сервисов в отдельных окнах

Изображение
Alex2013
долгожитель
 
Сообщения: 3035
Зарегистрирован: 03.04.2013 11:59:44

Re: Shell2Shell(Оболочка для оболочки) запуск SD и не только

Сообщение Alex2013 » 12.10.2024 14:07:41

Задумал я делать простую "базу промтов" с картинками, настоящую БД тащить в такой простой проект(и там так куча наворотов "сама собой" образовалась ) лень да не зачем . Но раз тут продвинутая работа с ini -фалами то решил что нужно это и дальше эксплуатировать но разумеется хочется сохранять всю базу в виде одного файла а для этого картинки нужно как-то перекодировать в текст . Разумеется мне как старому фидошнику сразу вспомнился UUE -код .
Найти рабочие утилиты UUE кодировки/раскодировки проблем не составило однако есть идея зашить этот функционал прямо в код ... вот тут нарисовалась проблема найти UUE кодировку/раскодировку в виде простой функции работающей с строкой ( function UUE_Code (S:String):String; function UUE_DeCode (S:String):String; ) оказалась довольно сложно . Может у кого-нибудь есть готовый модуль ?
Alex2013
долгожитель
 
Сообщения: 3035
Зарегистрирован: 03.04.2013 11:59:44

Re: Shell2Shell(Оболочка для оболочки) запуск SD и не только

Сообщение Alexander » 12.10.2024 16:57:00

Это не то ?

http://www.codenet.ru/progr/delphi/stat ... coding.php
https://compress.ru/article.aspx?id=10080#43

И наверное надо его под Линукс портировать.
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 758
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Re: Shell2Shell(Оболочка для оболочки) запуск SD и не только

Сообщение Alex2013 » 12.10.2024 17:34:52

Спасибо за отзыв, но "не совсем то" первый вариант только кодирует, второй требует Indy подключать ( не проблема но "старик Окам бритву опасную точит" и приговаривает "не тащи фигню лишнюю в код свой " :wink: ) .
Зы
Хотя в заглянуть в исходный код инди это идея !
Зы Зы
Что лучше UUE или MIME/Base64(32) ?
Alex2013
долгожитель
 
Сообщения: 3035
Зарегистрирован: 03.04.2013 11:59:44

Re: Shell2Shell(Оболочка для оболочки) запуск SD и не только

Сообщение Alexander » 12.10.2024 18:17:35

Раскодировка может быть здесь ?

https://github.com/graemeg/xananews

Decode UUE, Base64 and yEncoded messages.
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 758
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Re: Shell2Shell(Оболочка для оболочки) запуск SD и не только

Сообщение Alex2013 » 12.10.2024 18:26:26

Нашел такую штуту ...
Delphi-Encryption-Compendium
https://github.com/Turan-Can/Delphi-Enc ... Compendium
(Вроде все просто S_UUE:=TFormat_UU.Encode(S) буду пробовать )

Добавлено спустя 1 час 8 минут 38 секунд:
Re: Shell2Shell(Оболочка для оболочки) запуск SD и не только...
Немного "стука в бубен" (пара правок в коде библиотеки ) и все заработало ... :wink:
Код: Выделить всё
Uses
... ,DECFmt, DECUtil;
//...
var
  S: string;
  UUE: Binary;
//..
  with TFormat_UU.Create do
  begin
    S := 'Delphi-Encryption-Compendium Вроде все просто! ';

    UUE := TFormat_UU.Encode( S[1] ,Length(S));

    ShowMessage('uue Encode :'+  uue);

    S:= TFormat_UU.Decode(uue);

    ShowMessage('uue Decode :'S);

    Free;
  end;

Правда есть сомнения в том что это "аутентичный UUE" но все кодирует и раскодирует, а большего мне и не надо...

Добавлено спустя 1 час 10 минут 46 секунд:
Re: Shell2Shell(Оболочка для оболочки) запуск SD и не только...
Alexander писал(а):Раскодировка может быть здесь ?

Там может быть что угодно но раскопки займут тучу времени .... ( Хорошо что Delphi-Encryption-Compendium нашел раньше чем занялся "цифровой археологией " ) но за поддержку все равно спасибо! :idea:

Добавлено спустя 27 минут 22 секунды:
Re: Shell2Shell(Оболочка для оболочки) запуск SD и не только...
Проще вообще не бывает но ... это PureBasic...
Код: Выделить всё
Procedure.s UUDecode(sInBuf.s)
  sOutBuf.s = ""
  For lLoop = 1 To Len(sInBuf) Step 4
    sOutBuf = sOutBuf + Chr((Asc(Mid(sInBuf, lLoop, 1)) - 32) * 4 + (Asc(Mid(sInBuf, lLoop + 1, 1)) - 32) / 16)
    sOutBuf = sOutBuf + Chr((Asc(Mid(sInBuf, lLoop + 1, 1)) % 16) * 16 + (Asc(Mid(sInBuf, lLoop + 2, 1)) - 32) / 4)
    sOutBuf = sOutBuf + Chr((Asc(Mid(sInBuf, lLoop + 2, 1)) % 4) * 64 + Asc(Mid(sInBuf, lLoop + 3, 1)) - 32)
  Next lLoop
  ProcedureReturn sOutBuf
EndProcedure

Procedure.s UUEncode(sInBuf.s)
  sOutBuf.s = ""
  For lLoop = 1 To Len(sInBuf) Step 3
    sOutBuf = sOutBuf + Chr(Asc(Mid(sInBuf, lLoop, 1)) / 4 + 32)
    sOutBuf = sOutBuf + Chr((Asc(Mid(sInBuf, lLoop, 1)) % 4) * 16 + Asc(Mid(sInBuf, lLoop + 1, 1)) / 16 + 32)
    sOutBuf = sOutBuf + Chr((Asc(Mid(sInBuf, lLoop + 1, 1)) % 16) * 4 + Asc(Mid(sInBuf, lLoop + 2, 1)) / 64 + 32)
    sOutBuf = sOutBuf + Chr(Asc(Mid(sInBuf, lLoop + 2, 1)) % 64 + 32)
  Next lLoop
  ProcedureReturn sOutBuf
EndProcedure

sText.s = uuEncode("1234567890abcdefghijklmnopqrstuvwxyz")
Debug "Encoded=" + sText
sText = uuDecode(sText)
Debug "Decoded=" + sText

Попытка сходу переписать на Паскаль не сработала ... Вроде все понятно (Mid - Copy) (Asc - Ord) ( % - div (или все-же mod ?)) ( For lLoop = 1 To Len(sInBuf) Step 4 заменяется через lLoop = 1; while lLoop < Len(sInBuf) do begin ... lLoop:=lLoop +4; end; )
Но что-то не сработало и код не раскодировался.
Alex2013
долгожитель
 
Сообщения: 3035
Зарегистрирован: 03.04.2013 11:59:44

Re: Shell2Shell(Оболочка для оболочки) запуск SD и не только

Сообщение RRYTY » 13.10.2024 13:45:58

Alex2013 писал(а):тут продвинутая работа с ini -фалами


:-D ооооочень "продвинутая"...
Не только написать "Hello, world!" в файл, но еще и прочитать это из файла! }:-)

Alexander писал(а):однако есть идея зашить этот функционал прямо в код


Давным-давно пользую пакет dcpcrypt-2.0.4.1
В составе есть модуль работы с Base64. Пакет неприхотлив и 100% кроссплаформенный, т.к. постоянно собираю проекты под разные винды и разный линукс. Можно оттуда взять, что нужно. :idea:
RRYTY
постоялец
 
Сообщения: 207
Зарегистрирован: 25.12.2021 10:00:32

Re: Shell2Shell(Оболочка для оболочки) запуск SD и не только

Сообщение iskander » 13.10.2024 14:43:03

RRYTY писал(а):Давным-давно пользую пакет dcpcrypt-2.0.4.1
В составе есть модуль работы с Base64.

А что, кто-то выпилил Base64 из стандартной библиотеки ФПЦ ?
iskander
энтузиаст
 
Сообщения: 606
Зарегистрирован: 08.01.2012 18:43:34

Re: Shell2Shell(Оболочка для оболочки) запуск SD и не только

Сообщение RRYTY » 13.10.2024 14:55:39

Кто ж его знает, чем пользуюсь, то и посоветовал. Мне шифрование нужно, Base64 там сопутствует.
RRYTY
постоялец
 
Сообщения: 207
Зарегистрирован: 25.12.2021 10:00:32

Re: Shell2Shell(Оболочка для оболочки) запуск SD и не только

Сообщение Alexander » 13.10.2024 15:54:54

Переписал на FreeBasic, предполагая, что "%" это Mod. Но тоже не очень работоспособно.

Код: Выделить всё
function UUDecode(ByVal sInBuf as String) as String
  Dim sOutBuf as String = ""
  Dim lLoop as Unsigned Long
  For lLoop = 1 To Len(sInBuf) Step 4
    sOutBuf = sOutBuf + Chr((Asc(Mid(sInBuf, lLoop, 1)) - 32) * 4 + (Asc(Mid(sInBuf, lLoop + 1, 1)) - 32) / 16)
    sOutBuf = sOutBuf + Chr((Asc(Mid(sInBuf, lLoop + 1, 1)) Mod 16) * 16 + (Asc(Mid(sInBuf, lLoop + 2, 1)) - 32) / 4)
    sOutBuf = sOutBuf + Chr((Asc(Mid(sInBuf, lLoop + 2, 1)) Mod 4) * 64 + Asc(Mid(sInBuf, lLoop + 3, 1)) - 32)
  Next lLoop
  return sOutBuf
End function

function UUEncode(ByVal sInBuf as String) as String
  Dim sOutBuf as String = ""
  Dim lLoop as Unsigned Long
  For lLoop = 1 To Len(sInBuf) Step 3
    sOutBuf = sOutBuf + Chr(Asc(Mid(sInBuf, lLoop, 1)) / 4 + 32)
    sOutBuf = sOutBuf + Chr((Asc(Mid(sInBuf, lLoop, 1)) Mod 4) * 16 + Asc(Mid(sInBuf, lLoop + 1, 1)) / 16 + 32)
    sOutBuf = sOutBuf + Chr((Asc(Mid(sInBuf, lLoop + 1, 1)) Mod 16) * 4 + Asc(Mid(sInBuf, lLoop + 2, 1)) / 64 + 32)
    sOutBuf = sOutBuf + Chr(Asc(Mid(sInBuf, lLoop + 2, 1)) Mod 64 + 32)
  Next lLoop
  return sOutBuf
End function

Dim sText as String

sText = UUEncode("1234567890abcdefghijklmnopqrstuvwxyz")
Print( "Encoded=" + sText )
sText = UUDecode(sText)
Print( "Decoded=" + sText )


Вывод:

Код: Выделить всё
./uu
Encoded=,3)S-#5V.TAY,&&B9V2E:F>H:7JK;'VN<W"Q<G.T=7:W>(FZ
Decoded=12s45v;Hy0b�gd�jh�iz�l~�sp�rt�uv�x��
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 758
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Re: Shell2Shell(Оболочка для оболочки) запуск SD и не только

Сообщение Alex2013 » 14.10.2024 00:13:16

RRYTY писал(а):Не только написать "Hello, world!" в файл, но еще и прочитать это из файла! }:-)

Тег [ирония] в явном виде не обнаружен ? Сочувствую...[/ирония] (Хотя там действительно чуток отличий от "стандартного применения" (в первую очередь при редактировании) имеется но это разумеется ерунда )
Зы
Код Base64 вроде менее компактный чем UUE (впрочем нужно проверить ).
Зы Зы
MIME(/Base64) есть в Delphi-Encryption-Compendium и там у меня все работает . (кроме кода PGP (MIME/Base64 with PGP Checksums))
Alex2013
долгожитель
 
Сообщения: 3035
Зарегистрирован: 03.04.2013 11:59:44

Re: Shell2Shell(Оболочка для оболочки) запуск SD и не только

Сообщение Alexander » 14.10.2024 10:15:16

Но зато так работает как часы:

Код: Выделить всё
program uued;

{$MODE OBJFPC}
{$H+}
{$SMARTLINK ON}
{$RANGECHECKS ON}

function UUDecode(sInBuf : string) : string;
var
lLoop : Int64 = 1;
begin
result := '';
while lLoop <= Length(sInBuf) do begin
    result := result + Chr((Ord(sInBuf[lLoop]) - 32) * 4 + (Ord(sInBuf[lLoop+1]) - 32) div 16);
    result := result + Chr((Ord(sInBuf[lLoop+1]) mod 16) * 16 + (Ord(sInBuf[lLoop+2]) - 32) div 4);
    result := result + Chr((Ord(sInBuf[lLoop+2]) mod 4) * 64 + Ord(sInBuf[lLoop+3]) - 32);
Inc(lLoop, 4);
end;
End;

function UUEncode(sInBuf : string) : string;
var
lLoop : Int64 = 1;
begin
result := '';
while lLoop <= Length(sInBuf) do begin
    result := result + Chr(Ord(sInBuf[lLoop]) div 4 + 32);
    result := result + Chr((Ord(sInBuf[lLoop]) mod 4) * 16 + Ord(sInBuf[lLoop+1]) div 16 + 32);
    result := result + Chr((Ord(sInBuf[lLoop+1]) mod 16) * 4 + Ord(sInBuf[lLoop+2]) div 64 + 32);
    result := result + Chr(Ord(sInBuf[lLoop+2]) mod 64 + 32);
Inc(lLoop, 3);
end;
End;

var
sText : string;

begin
sText := UUEncode('1234567890abcdefghijklmnopqrstuvwxyz');
WriteLn('Encoded=' + sText);
sText := UUDecode(sText);
WriteLn('Decoded=' + sText);
end.
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 758
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Re: Shell2Shell(Оболочка для оболочки) запуск SD и не только

Сообщение Alex2013 » 14.10.2024 11:57:52

Спасибо! Видимо я где-то что-то перепутал при переписывании. (и все верно copy не нужен )
Теперь нужно заставить работать с картинкой но это совсем просто.
Зы
Кстати по идее надежнее и быстрее сделать через shl и shr
как-то так( Если я где-то снова что-то не путаю ) ...
Код: Выделить всё
    result := result + Chr((Ord(sInBuf[lLoop]) - 32) shr 2 + (Ord(sInBuf[lLoop+1]) - 32) shl  4);
    result := result + Chr((Ord(sInBuf[lLoop+1]) shl 4 )  shr 4 + (Ord(sInBuf[lLoop+2]) - 32) shl 2 );
    result := result + Chr((Ord(sInBuf[lLoop+2])  shl 2)  shr 8 + Ord(sInBuf[lLoop+3]) - 32);
Alex2013
долгожитель
 
Сообщения: 3035
Зарегистрирован: 03.04.2013 11:59:44

Re: Shell2Shell(Оболочка для оболочки) запуск SD и не только

Сообщение Alexander » 14.10.2024 14:12:03

Оптимизированный вариант ? Как-то так ?

Код: Выделить всё
program uued;

{$MODE OBJFPC}
{$H+}
{$SMARTLINK ON}
{$RANGECHECKS ON}

function UUDecode(s : string) : string;
var
f : Int64 = 1;
begin
result := '';
while f <= Length(s) do begin
    result := result + Chr((Ord(s[f]) - 32) shl 2 + (Ord(s[f+1]) - 32) shr 4);
    result := result + Chr((Ord(s[f+1]) and 15) shl 4 + (Ord(s[f+2]) - 32) shr 2);
    result := result + Chr((Ord(s[f+2]) and 3) shl 6 + Ord(s[f+3]) - 32);
Inc(f, 4);
end;
End;

function UUEncode(s : string) : string;
var
f : Int64 = 1;
begin
result := '';
while f <= Length(s) do begin
    result := result + Chr(Ord(s[f]) shr 2 + 32);
    result := result + Chr((Ord(s[f]) and 3) shl 4 + Ord(s[f+1]) shr 4 + 32);
    result := result + Chr((Ord(s[f+1]) and 15) shl 2 + Ord(s[f+2]) shr 6 + 32);
    result := result + Chr(Ord(s[f+2]) and 63 + 32);
Inc(f, 3);
end;
End;

var
sText : string;

begin
sText := UUEncode('1234567890abcdefghijklmnopqrstuvwxyz');
WriteLn('Encoded=' + sText);
sText := UUDecode(sText);
WriteLn('Decoded=' + sText);
end.
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 758
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Re: Shell2Shell(Оболочка для оболочки) запуск SD и не только

Сообщение Alex2013 » 14.10.2024 14:26:02

Круто ! :idea: :D
(Надо будет проверить... )
Alex2013
долгожитель
 
Сообщения: 3035
Зарегистрирован: 03.04.2013 11:59:44

Пред.

Вернуться в Разное

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru