Advertisement
Guest User

Untitled

a guest
May 26th, 2017
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.43 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. username=USERNAME
  4. password=PASSWORD
  5.  
  6. for database in `/usr/bin/mysql -u$username -p$password -e"SHOW DATABASES;" | /usr/bin/awk {'print $1'} | /bin/egrep -v "Database|mysql|information_schema"`
  7. do
  8.         /usr/bin/mysql -u$username -p$password -D$database -e"DELIMITER //
  9.  
  10. DROP FUNCTION IF EXISTS ROR32//
  11. CREATE FUNCTION ROR32 (inp BIGINT, shft TINYINT) RETURNS INT UNSIGNED DETERMINISTIC NO SQL
  12.    RETURN ((inp >> shft) | (inp << (32 - shft))) & 0x00000000FFFFFFFF
  13. //
  14.  
  15. DROP FUNCTION IF EXISTS ARRAY_GET//
  16. CREATE FUNCTION ARRAY_GET (array BLOB, idx TINYINT UNSIGNED) RETURNS INT UNSIGNED DETERMINISTIC NO SQL
  17. BEGIN
  18.    SET idx = (idx * 4) + 1;
  19.    RETURN (ASCII(SUBSTRING(array FROM idx+0 FOR 1)) << 24) | (ASCII(SUBSTRING(array FROM idx+1 FOR 1)) << 16) |
  20.           (ASCII(SUBSTRING(array FROM idx+2 FOR 1)) <<  8) | (ASCII(SUBSTRING(array FROM idx+3 FOR 1)) <<  0);
  21. END
  22. //
  23.  
  24. DROP FUNCTION IF EXISTS SHA2//
  25. CREATE FUNCTION SHA2 (message MEDIUMBLOB, bits SMALLINT) RETURNS CHAR(64) DETERMINISTIC CONTAINS SQL
  26. BEGIN
  27.    DECLARE k, w BLOB;
  28.    DECLARE a, b, c, d, e, f, g, h, h0, h1, h2, h3, h4, h5, h6, h7, wn, s0, s1, maj, ch, t1, t2, i,
  29.            messagelen, npaddingbits, len, ppmessagelen, numchunks, currentchunk INT UNSIGNED;
  30.    DECLARE modvalue BIGINT UNSIGNED DEFAULT 0x00000000FFFFFFFF;
  31.    DECLARE ppmessage, chunk MEDIUMBLOB;
  32.  
  33.    IF bits != 256 THEN SELECT 'BAD_BIT_SIZE' FROM NO_SUCH_TABLE INTO @nothing; END IF;
  34.  
  35.    -- SHA2 constants
  36.    SET k = UNHEX('428A2F9871374491B5C0FBCFE9B5DBA53956C25B59F111F1923F82A4AB1C5ED5D807'
  37.                  'AA9812835B01243185BE550C7DC372BE5D7480DEB1FE9BDC06A7C19BF174E49B69C1'
  38.                  'EFBE47860FC19DC6240CA1CC2DE92C6F4A7484AA5CB0A9DC76F988DA983E5152A831'
  39.                  'C66DB00327C8BF597FC7C6E00BF3D5A7914706CA63511429296727B70A852E1B2138'
  40.                  '4D2C6DFC53380D13650A7354766A0ABB81C2C92E92722C85A2BFE8A1A81A664BC24B'
  41.                  '8B70C76C51A3D192E819D6990624F40E3585106AA07019A4C1161E376C082748774C'
  42.                  '34B0BCB5391C0CB34ED8AA4A5B9CCA4F682E6FF3748F82EE78A5636F84C878148CC7'
  43.                  '020890BEFFFAA4506CEBBEF9A3F7C67178F2');
  44.    SET h0 = 0x6a09e667, h1 = 0xbb67ae85, h2 = 0x3c6ef372, h3 = 0xa54ff53a, h4 = 0x510e527f,
  45.        h5 = 0x9b05688c, h6 = 0x1f83d9ab, h7 = 0x5be0cd19;
  46.  
  47.    SET messagelen = LENGTH(message) * 8, npaddingbits = 8;
  48.    WHILE ((messagelen + npaddingbits) % 512) != 448 DO
  49.        SET npaddingbits = npaddingbits + 8;
  50.    END WHILE;
  51.  
  52.    SET ppmessage = CONCAT(message, CHAR(0x80), REPEAT(CHAR(0x00), (npaddingbits - 8) / 8),
  53.                           UNHEX(LPAD(HEX(messagelen), 16, '0')));
  54.    SET ppmessagelen = LENGTH(ppmessage) * 8;
  55.    SET numchunks = ppmessagelen >> 9, currentchunk = 1;
  56.  
  57.    REPEAT
  58.        SET chunk = SUBSTRING(ppmessage FROM ((currentchunk - 1) * 64) + 1 FOR 64);
  59.        SET a = h0, b = h1, c = h2, d = h3, e = h4, f = h5, g = h6, h = h7, i = 0;
  60.  
  61.        SET w = chunk;
  62.        WHILE i < 64 DO
  63.            IF i > 15 THEN
  64.                SET wn = ARRAY_GET(w, i - 15), s0 = ROR32(wn,  7) ^ ROR32(wn, 18) ^ (wn >>  3),
  65.                    wn = ARRAY_GET(w, i -  2), s1 = ROR32(wn, 17) ^ ROR32(wn, 19) ^ (wn >> 10),
  66.                    wn = (ARRAY_GET(w, i - 16) + s0 + ARRAY_GET(w, i - 7) + s1) & modvalue,
  67.                    w = CONCAT(w, CHAR(wn >> 24, (wn & 0x00FF0000) >> 16, (wn & 0x0000FF00) >> 8,
  68.                               wn & 0x000000FF));
  69.            ELSE
  70.                SET wn = ARRAY_GET(w, i);
  71.            END IF;
  72.  
  73.            SET s0 = ROR32(a, 2) ^ ROR32(a, 13) ^ ROR32(a, 22), maj = (a & b) ^ (a & c) ^ (b & c),
  74.                t2 = (s0 + maj) & modvalue,
  75.                s1 = ROR32(e, 6) ^ ROR32(e, 11) ^ ROR32(e, 25), ch = (e & f) ^ ((~e) & g),
  76.                t1 = (h + s1 + ch + ARRAY_GET(k, i) + wn) & modvalue,
  77.                h = g, g = f, f = e, e = (d + t1) & modvalue, d = c, c = b, b = a,
  78.                a = (t1 + t2) & modvalue,
  79.                i = i + 1;
  80.        END WHILE;
  81.  
  82.        SET h0 = (h0 + a) & modvalue, h1 = (h1 + b) & modvalue, h2 = (h2 + c) & modvalue,
  83.            h3 = (h3 + d) & modvalue, h4 = (h4 + e) & modvalue, h5 = (h5 + f) & modvalue,
  84.            h6 = (h6 + g) & modvalue, h7 = (h7 + h) & modvalue,
  85.            currentchunk = currentchunk + 1;
  86.    UNTIL currentchunk > numchunks
  87.    END REPEAT;
  88.  
  89.    RETURN LOWER(CONCAT(HEX(h0), HEX(h1), HEX(h2), HEX(h3), HEX(h4), HEX(h5), HEX(h6), HEX(h7)));
  90. END
  91. //
  92.  
  93. DELIMITER ;"
  94. done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement