Важно!
1. При копировании текстов функций этого раздела, следует «крупно иметь в виду», что существенная часть функций вызывает другие функции (размещенные в этом разделе, а также и в других разделах тоже).
2. Чтобы компенсировать этот момент — в конце страницы можно скачать исходные тексты всех функций в формате PG-backup (SQL-текст).
Иной раз возникает необходимость простого шифрования текста при хранении его в БД.
Ниже приведена пара предназначенных для этого функций:
- str_ultrasimple_code — ультра простой (и ультра «неэкономичный») алгоритм шифрования текста;
- str_ultrasimple_decode — алгоритм расшифровки текста, зашифрованного функцией str_ultrasimple_code().
CREATE OR REPLACE FUNCTION public.str_ultrasimple_code(sx text) RETURNS text AS $BODY$ DECLARE res text; sn character varying; i integer; m integer; n integer; ch char(1); BEGIN /* Ультра простой (и ультра "неэкономичный") алгоритм шифрования текста Пример вызова: select str_ultrasimple_code ('Как дела?'); -- "813 7231 8331 2331 1331 99- 7331 7231 5031" select str_ultrasimple_code ('Привет, как дела? Нормально...'); -- 103 103 103 1431 0431 5531 8331 7231 9331 3431 1431 8031 99- 813 7231 8331 2331 1331 99- 7331 7231 7331 99- 992 5431 2331 9231 5331 3431 0131 */ res = ''; IF (sx is not null) THEN IF (sx <> '') THEN sx = reverse(sx); m = char_length(sx); i = 0; WHILE i<m LOOP i = i + 1; ch = substring(sx,i,1); IF (ch <> ' ') THEN n = ascii(ch); n = n + 255; ELSE n = -99; END IF; sn = int_as_str(n); sn = reverse(sn); res = res || sn || ' '; END LOOP; res = str_is_null(res); END IF; END IF; RETURN res; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; COMMENT ON FUNCTION public.str_ultrasimple_code(text) IS 'УльтраУльтра простой (и ультра "неэкономичный") алгоритм шифрования текста';
CREATE OR REPLACE FUNCTION public.str_ultrasimple_decode(sx text) RETURNS text AS $BODY$ DECLARE res text; sn character varying; n1 integer; n2 integer; ch char(1); BEGIN /* Алгоритм расшифровки текста, зашифрованного функцией str_ultrasimple_code() Пример вызова: select str_ultrasimple_decode ('813 7231 8331 2331 1331 99- 7331 7231 5031'); -- "Как дела?" select str_ultrasimple_decode ('103 103 103 1431 0431 5531 8331 7231 9331 3431 1431 8031 99- 813 7231 8331 2331 1331 99- 7331 7231 7331 99- 992 5431 2331 9231 5331 3431 0131'); -- "Привет, как дела? Нормально..." select str_ultrasimple_decode(str_ultrasimple_code('Привет, как дела? Нормально...')); -- "Привет, как дела? Нормально..." ; select str_ultrasimple_decode ( str_ultrasimple_code ( 'Прошло немало лет с тех пор как компьютеры появились в школе и дома. В школе вы изучаете с их помощью информатику (что полезно), а дома он служит вам партнёром для игр (что приятно). А цель этой книги - показать, как можно сочетать приятное с полезным, то есть использовать компьютер при изучении школьной программы. В этой книге вы найдёте несколько десятков уроков по разным школьным предметам. И уроки эти не простые, а занимательные! Поэтому на каждом уроке мы будем пи-сать интересные компьютерные программы. ' ) ); */ res = ''; sx = str_is_null(sx); IF (sx <> '') THEN IF (sx <> '') THEN sx = sx || chr(32); sn = ''; n1 = 1; WHILE (n1>0) LOOP n1 = strpos(sx, chr(32)); IF (n1>0) THEN sn = str_is_null(substr(sx, 1, n1)); sn = reverse(sn); n2 = str_as_int(sn); IF (n2>0) THEN n2 = n2 - 255; ch = chr(n2); res = res || ch; ELSE res = res || chr(32); END IF; sx = str_is_null(substr(sx, n1, char_length(sx))); END IF; END LOOP; sx = str_is_null(sx); IF (sx <> '') THEN sn = sx; sn = reverse(sn); n2 = str_as_int(sn); IF (n2>0) THEN n2 = n2 - 255; ch = chr(n2); res = res || ch; ELSE res = res || chr(32); END IF; END IF; res = str_is_null(res); res = reverse(res); END IF; END IF; RETURN res; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; COMMENT ON FUNCTION public.str_ultrasimple_decode(text) IS 'Алгоритм расшифровки текста, зашифрованного функцией str_ultrasimple_code()';
Скачать PG-backup (SQL-текст функций)
Дата: 10.12.2021