[personal profile] zinal
Как добавить в DB2 функцию для расчета хеш-кода по алгоритму SHA-1 (или любому другому поддерживаемому Java):

(а) Начиная с версии 11.1, алгоритмы MD5, SHA1, SHA2_256 и SHA2_512 доступны через встроенную функцию HASH(), которую можно обернуть в вызов встроенной функции HEX() для получения текстового значения.

Использование:
VALUES HEX(HASH('Вассисуалий Алибабаевич', 1));



(б) В более ранних версиях, либо для не поддерживаемых типов хеша, приходится использовать Java UDF.

HashUtil.java:
import java.security.MessageDigest;

public class HashUtil
{   // the scalar UDF
  public static String hashBase64(String func, String inputString) throws Exception {
    byte[] result = MessageDigest.getInstance(func).digest(inputString.getBytes("UTF-8"));
    return javax.xml.bind.DatatypeConverter.printBase64Binary(result);
  }
  public static String hashHex(String func, String inputString) throws Exception {
    byte[] result = MessageDigest.getInstance(func).digest(inputString.getBytes("UTF-8"));
    return javax.xml.bind.DatatypeConverter.printHexBinary(result);
  }
  public static void main(String[] args) {
    try {
      for (String s : args) {
         System.out.println(hashHex("SHA-1", s));
      }
    } catch(Exception ex) {
      ex.printStackTrace(System.err);
      System.exit(1);
    }
  }
}



Сборка:
javac HashUtil.java
jar cvf HashUtil.jar HashUtil.class
db2 -t
   CALL sqlj.install_jar('file:./HashUtil.jar', 'HASHUTILJAR');
   CREATE OR REPLACE FUNCTION work.hash_hex(varchar(30), varchar(2000))
      RETURNS VARCHAR(100) LANGUAGE JAVA PARAMETER STYLE JAVA
      DETERMINISTIC NO EXTERNAL ACTION NO SQL 
      EXTERNAL NAME 'HASHUTILJAR:HashUtil.hashHex'; 


Использование:
VALUES work.hash_hex('SHA-1', 'Вассисуалий Алибабаевич');


Profile

zinal: (Default)
Maksim Zinal

April 2017

M T W T F S S
     12
3456 789
10111213141516
17181920212223
24252627282930

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 25th, 2017 09:53 am
Powered by Dreamwidth Studios