import javax.crypto.KeyGenerator ; import javax.crypto.Mac ; import javax.crypto.SecretKey ; import javax.crypto.spec.SecretKeySpec ; import java.security.NoSuchAlgorithmException ; import java.security.InvalidKeyException ; import org.apache.commons.codec.binary.Base64 ; public class TestHMAC { SecretKey key ; Mac mac ; public String getKey () { byte[] bin = key.getEncoded () ; byte[] ascii = Base64.encodeBase64 (bin) ; return new String (ascii) ; } public TestHMAC (String alg) throws NoSuchAlgorithmException, InvalidKeyException { KeyGenerator gen = KeyGenerator.getInstance (alg) ; key = gen.generateKey () ; mac = Mac.getInstance (key.getAlgorithm ()) ; mac.init (key) ; } public TestHMAC (String alg, String k) throws NoSuchAlgorithmException, InvalidKeyException { byte [] ascii = k.getBytes () ; byte [] c = Base64.decodeBase64 (k) ; key = new SecretKeySpec (c, alg) ; mac = Mac.getInstance (key.getAlgorithm ()) ; mac.init (key) ; } public byte[] hash (Object o) { byte[] c = o.toString ().getBytes () ; return mac.doFinal (c) ; } public String hashToAscii (Object o) { byte [] hash = hash (o) ; byte [] ascii = Base64.encodeBase64 (hash) ; return new String (ascii) ; } }
Showing posts with label apache commons. Show all posts
Showing posts with label apache commons. Show all posts
Tuesday, January 15, 2013
计算 HMAC
如何使用 Java 计算数字签名。
Sunday, August 22, 2010
Java 中的日志解决方案
Java 里面有一些现成的 logging 库,比如 log4j(apache logging 的子项目),JDK 里面自带的 java.util.logging,以及 jakarta commons 里面的 logging 库 。这样也就诞生了很多 wrapper,或者用 design pattern 的话来说所谓 facade 的东西,比如 org.apache.commons.logging 和 org.slf4j。这两个使用比较容易,一般提供了一个 factory 用于获得 logger(前者为 LogFactory.getLog(),后者为 LoggerFactory.getLogger())。
下面用一个简单的例子说明如何使用 org.apache.commons.logging。
后者提供了几个 hard-wired 的库,如 slf4j-nop(无输出)、slf4j-jdk(使用 java.util.logging)、slf4j-log4j(使用 log4j)、slf4j-simple(使用 System.err)、slf4j-jcl(使用 jakarta commons logging)。通过改变 -cp 就能方便的使用不同的 logger。
值得一提的是在 apache 的 logging 里面不仅仅有 java 的,还有 C++、.net 和 php 的 logger。
下面用一个简单的例子说明如何使用 org.apache.commons.logging。
import org.apache.commons.logging.Log ; import org.apache.commons.logging.LogFactory ; private Log log = LogFactory.getLog( MyClass.class ) ; if( log.isFatalEnabled() ) log.fatal( "this is a fatal error message") ; import org.slf4j.Logger ; import org.slf4j.LoggerFactory ; Logger log = LoggerFactory.getLogger( MyClass.class ) ; log.debug( "something in {} is {}", something, val) ;类似的还有 info、warn、error、trace 用在不同的情况。
后者提供了几个 hard-wired 的库,如 slf4j-nop(无输出)、slf4j-jdk(使用 java.util.logging)、slf4j-log4j(使用 log4j)、slf4j-simple(使用 System.err)、slf4j-jcl(使用 jakarta commons logging)。通过改变 -cp 就能方便的使用不同的 logger。
值得一提的是在 apache 的 logging 里面不仅仅有 java 的,还有 C++、.net 和 php 的 logger。
Subscribe to:
Posts (Atom)