Pular para o conteúdo
  • Este tópico contém 1 resposta, 2 vozes e foi atualizado pela última vez 1 ano, 5 meses atrás por giovano avatargioracle.
Visualizando 2 posts - 1 até 2 (de 2 do total)
  • Autor
    Posts
  • #167608
    Loro
    Participante

      Por acaso alguém conhece alguma função em oracle que gere um código hash NTLM ?

      #167734
      giovano avatargioracle
      Participante

        Veja se isso te ajuda:

        CREATE OR REPLACE FUNCTION generate_ntlm_hash(input_string IN VARCHAR2) RETURN VARCHAR2 IS
        output_hash VARCHAR2(32);
        BEGIN
        — Converte a string de entrada para maiúsculas
        input_string := UPPER(input_string);

        — Preenche a string de entrada com zeros à direita até atingir um comprimento múltiplo de 7
        WHILE MOD(LENGTH(input_string), 7) != 0 LOOP
        input_string := input_string || ‘0’;
        END LOOP;

        — Variáveis de inicialização
        DECLARE
        A NUMBER := 0x67452301;
        B NUMBER := 0xEFCDAB89;
        C NUMBER := 0x98BADCFE;
        D NUMBER := 0x10325476;
        E NUMBER := 0xC3D2E1F0;
        BEGIN
        — Divide a string de entrada em blocos de 7 caracteres
        FOR i IN 1..LENGTH(input_string) / 7 LOOP
        — Converte cada bloco de 7 caracteres para um valor numérico
        DECLARE
        block_value NUMBER := 0;
        BEGIN
        FOR j IN 0..6 LOOP
        block_value := block_value + ASCII(SUBSTR(input_string, (i – 1) * 7 + j + 1, 1)) * POWER(256, 6 – j);
        END LOOP;

        ` — Executa as operações de rotação e combinação dos valores
        DECLARE
        F NUMBER := (B AND C) OR ((NOT B) AND D);
        G NUMBER := (D AND E) OR ((NOT D) AND B);
        BEGIN
        D := D + (ROTATE_LEFT((A + F + block_value + 0xD76AA478), 7));
        B := B + (ROTATE_LEFT((E + G + block_value + 0x242070DB), 12));
        A := A + (ROTATE_LEFT((D + F + block_value + 0xC1BDCEEE), 17));
        E := E + (ROTATE_LEFT((B + G + block_value + 0xF57C0FAF), 22));
        C := C + (ROTATE_LEFT((A + F + block_value + 0x4787C62A), 7));
        B := B + (ROTATE_LEFT((E + G + block_value + 0xA8304613), 12));
        A := A + (ROTATE_LEFT((D + F + block_value + 0xFD469501), 17));
        E := E + (ROTATE_LEFT((B + G + block_value + 0x698098D8), 22));
        D := D + (ROTATE_LEFT((A + F + block_value + 0x8B44F7AF), 7));
        B := B + (ROTATE_LEFT((E + G + block_value + 0xFFFF5BB1), 12));
        A := A + (ROTATE_LEFT((D + F + block_value + 0x895CD7BE), 17));
        E := E + (ROTATE_LEFT((B + G + block_value + 0x6B901122), 22));
        C := C + (ROTATE_LEFT((A + F + block_value + 0xFD987193), 7));
        B := B + (ROTATE_LEFT((E + G + block_value + 0xA679438E), 12));
        A := A + (ROTATE_LEFT((D + F + block_value + 0x49B40821), 17));
        E := E + (ROTATE_LEFT((B + G + block_value + 0xF61E2562), 22));
        END;
        END;
        END LOOP;

        — Concatena os valores A, B, C, D e E para formar o hash final
        output_hash := LPAD(TO_CHAR(A, ‘FMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX’), 8, ‘0’) ||
        LPAD(TO_CHAR(B, ‘FMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX’), 8, ‘0’) ||
        LPAD(TO_CHAR(C, ‘FMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX’), 8, ‘0’) ||
        LPAD(TO_CHAR(D, ‘FMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX’), 8, ‘0’) ||
        LPAD(TO_CHAR(E, ‘FMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX’), 8, ‘0’);
        END;

        RETURN output_hash;
        END;
        /

        Para executar:

        DECLARE
        input_string VARCHAR2(100) := ‘senha123’;
        ntlm_hash VARCHAR2(32);
        BEGIN
        ntlm_hash := generate_ntlm_hash(input_string);
        DBMS_OUTPUT.PUT_LINE(‘Hash NTLM: ‘ || ntlm_hash);
        END;
        /

        Espero ter ajudado !

      Visualizando 2 posts - 1 até 2 (de 2 do total)
      • Você deve fazer login para responder a este tópico.
      plugins premium WordPress