[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', 'Вассисуалий Алибабаевич');


From:
Anonymous( )Anonymous This account has disabled anonymous posting.
OpenID( )OpenID You can comment on this post while signed in with an account from many other sites, once you have confirmed your email address. Sign in using OpenID.
User
Account name:
Password:
If you don't have an account you can create one now.
Subject:
HTML doesn't work in the subject.

Message:

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org


 
Notice: This account is set to log the IP addresses of everyone who comments.
Links will be displayed as unclickable URLs to help prevent spam.

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:42 am
Powered by Dreamwidth Studios