package com.mandi.common; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.SecureRandom; import java.security.Signature; import java.security.interfaces.DSAPrivateKey; import java.security.interfaces.DSAPublicKey; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import java.util.HashMap; import java.util.Map; import org.springframework.util.Base64Utils; /** * @author mengly * @version 创建时间:2015å¹´10月27æ—¥ 下åˆ6:53:16 * 类说明 :ç¾å */ public class DSAMethod { /** * 用ç§é’¥å¯¹ä¿¡æ¯ç”Ÿæˆæ•°å—ç¾å * * @param data * åŠ å¯†æ•°æ® * @param privateKey * ç§é’¥ * * @return * @throws Exception */ public static String sign(byte[] data, String privateKey) throws Exception { // 解密由base64ç¼–ç çš„ç§é’¥ byte[] keyBytes =Base64Utils.decodeFromString(privateKey); // æž„é€ PKCS8EncodedKeySpec对象 PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes); // KEY_ALGORITHM æŒ‡å®šçš„åŠ å¯†ç®—æ³• KeyFactory keyFactory = KeyFactory.getInstance("DSA"); // å–ç§é’¥åŒ™å¯¹è±¡ PrivateKey priKey = keyFactory.generatePrivate(pkcs8KeySpec); // 用ç§é’¥å¯¹ä¿¡æ¯ç”Ÿæˆæ•°å—ç¾å Signature signature = Signature.getInstance(keyFactory.getAlgorithm()); signature.initSign(priKey); signature.update(data); return Base64Utils.encodeToString(signature.sign()); } /** * 用ç§é’¥å¯¹ä¿¡æ¯ç”Ÿæˆæ•°å—ç¾å * * @param data * åŠ å¯†æ•°æ® * @param privateKey * ç§é’¥ * * @return * @throws Exception */ public static String sign(String content, String privateKey) throws Exception { // 解密由base64ç¼–ç çš„ç§é’¥ byte[] data=content.getBytes("utf-8"); byte[] keyBytes =Base64Utils.decodeFromString(privateKey); // æž„é€ PKCS8EncodedKeySpec对象 PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes); // KEY_ALGORITHM æŒ‡å®šçš„åŠ å¯†ç®—æ³• KeyFactory keyFactory = KeyFactory.getInstance("DSA"); // å–ç§é’¥åŒ™å¯¹è±¡ PrivateKey priKey = keyFactory.generatePrivate(pkcs8KeySpec); // 用ç§é’¥å¯¹ä¿¡æ¯ç”Ÿæˆæ•°å—ç¾å Signature signature = Signature.getInstance(keyFactory.getAlgorithm()); signature.initSign(priKey); signature.update(data); return Base64Utils.encodeToString(signature.sign()); } public static boolean verify(String content, String publicKey, String sign) throws Exception { byte[] data=content.getBytes("utf-8"); // 解密由base64ç¼–ç 的公钥 byte[] keyBytes = Base64Utils.decodeFromString(publicKey); // æž„é€ X509EncodedKeySpec对象 X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); // ALGORITHM æŒ‡å®šçš„åŠ å¯†ç®—æ³• KeyFactory keyFactory = KeyFactory.getInstance("DSA"); // å–公钥匙对象 PublicKey pubKey = keyFactory.generatePublic(keySpec); Signature signature = Signature.getInstance(keyFactory.getAlgorithm()); signature.initVerify(pubKey); signature.update(data); // 验è¯ç¾åæ˜¯å¦æ£å¸¸ return signature.verify(Base64Utils.decodeFromString(sign)); } /** * 生æˆå¯†é’¥ * * @param seed * ç§å * @return 密钥对象 * @throws Exception */ public static Map<String, Object> initKey(String seed) throws Exception { KeyPairGenerator keygen = KeyPairGenerator.getInstance("DSA"); // åˆå§‹åŒ–éšæœºäº§ç”Ÿå™¨ SecureRandom secureRandom = new SecureRandom(); secureRandom.setSeed(seed.getBytes()); keygen.initialize(1024, secureRandom); KeyPair keys = keygen.genKeyPair(); DSAPublicKey publicKey = (DSAPublicKey) keys.getPublic(); DSAPrivateKey privateKey = (DSAPrivateKey) keys.getPrivate(); Map<String, Object> map = new HashMap<String, Object>(2); map.put("publicKey", publicKey); map.put("privateKey", privateKey); return map; } }