`

RsaUtil 生成公私钥

    博客分类:
  • java
 
阅读更多

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.security.GeneralSecurityException;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.SignatureException;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.ssl.PKCS8Key;

import com.froad.openapi.util.RSAUtil;
import com.froad.platform.logger.Logger;
import com.froad.platform.logger.LoggerManager;

public class RsaUtil {
   
    private static Logger Log = LoggerManager.getLogger(RsaUtil.class.getName());
   
    /**
      * 方法描述:初始化私钥
      * @param: String str
      * @return: PublicKey
      * @version: 1.0
        * @time: 2011-12-7 上午9:11:15
      */
    public static PrivateKey initPrivateKey(String path, String pwd) {
        try {
           
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
           
            File file = new File(path);
            byte[] b = null;

            InputStream in = new FileInputStream(file);

            PKCS8Key pkcs8 = new PKCS8Key(in, pwd.toCharArray());

            b = pkcs8.getDecryptedBytes();

            PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(b);

            PrivateKey prikey = keyFactory.generatePrivate(keySpec);

            return prikey;
           
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            Log.info("初始化私钥无此算法");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            Log.info("初始化私钥文件未找到");
        } catch (GeneralSecurityException e) {
            Log.info("初始化私钥安全异常");
            e.printStackTrace();
        } catch (IOException e) {
            Log.info("初始化私钥IO异常");
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
            Log.info("初始化私钥异常");
        }
        return null;
    }
   
    /**
      * 方法描述:初始化公钥
      * @param: String str
      * @return: PublicKey
      * @version: 1.0
      * @time: 2011-12-7 上午9:11:15
      */
    public static PublicKey initPublicKey(String str) {
        KeyFactory keyFactory;
        try {
            keyFactory = KeyFactory.getInstance("RSA");

            X509EncodedKeySpec keySpec = new X509EncodedKeySpec((Base64.decodeBase64(str)));

            PublicKey pubkey = keyFactory.generatePublic(keySpec);

            return pubkey;

        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            Log.info("初始化公钥无此算法");
        } catch (InvalidKeySpecException e) {
            e.printStackTrace();
            Log.info("初始化公钥无效的密钥规范");
        } catch (Exception e) {
            e.printStackTrace();
            Log.info("初始化公钥异常");
        }
        return null;
    }

    /**
      * 方法描述:签名
      * @param: String content, PrivateKey key, String charsetSet
      * @return: String
      * @version: 1.0
      * @time: 2011-12-7 上午9:12:48
      */
    public static String signPrivateKey(String content, PrivateKey key, String charsetSet) throws NoSuchAlgorithmException,
            IOException, InvalidKeySpecException, InvalidKeyException, SignatureException {
        PrivateKey prikey = key;

        Signature signature = Signature.getInstance("SHA1WithRSA");

        signature.initSign(prikey);

        signature.update(content.getBytes(charsetSet));

        byte[] signBytes = signature.sign();

        String sign = new String(Base64.encodeBase64(signBytes));
        return sign;
    }

    /**
      * 方法描述:验签
      * @param: String content, String sign,PublicKey key,String charsetSet
      * @return: boolean
      * @version: 1.0
      * @time: 2011-12-7 上午9:28:04
      */
    public static boolean verifyPublicKey(String content, String sign, PublicKey key,
            String charsetSet) throws NoSuchAlgorithmException, IOException,
            InvalidKeySpecException, InvalidKeyException, SignatureException {
        PublicKey pubkey = key;

        byte[] signed = Base64.decodeBase64(sign.getBytes());

        Signature signature = Signature.getInstance("SHA1WithRSA");

        signature.initVerify(pubkey);

        signature.update(content.getBytes(charsetSet));

        return signature.verify(signed);
    }

    /**
      * 方法描述:签名
      * @param: String content, PrivateKey key
      * @return: String
      * @version: 1.0
       * @time: 2011-12-7 上午9:22:21
      */
    public static String signPrivateKey(String content, PrivateKey key) throws NoSuchAlgorithmException, IOException,
    InvalidKeySpecException, InvalidKeyException, SignatureException {
        PrivateKey prikey = key;

        Signature signature = Signature.getInstance("SHA1WithRSA");
        signature.initSign(prikey);
        signature.update(content.getBytes("UTF-8"));
        byte[] signBytes = signature.sign();
        String sign = new String(Base64.encodeBase64(signBytes));
       
        return sign;
    }

    /**
      * 方法描述:验签
      * @param: String content, String sign,PublicKey key
      * @return: boolean
      * @version: 1.0
      * @time: 2011-12-7 上午9:25:05
      */
    public static boolean verifyPublicKey(String content, String sign, PublicKey key)
            throws NoSuchAlgorithmException, IOException,
            InvalidKeySpecException, InvalidKeyException, SignatureException {
        PublicKey pubkey = key;

        byte[] signed = Base64.decodeBase64(sign.getBytes());

        Signature signature = Signature.getInstance("SHA1WithRSA");

        signature.initVerify(pubkey);

        signature.update(content.getBytes("UTF-8"));

        return signature.verify(signed);
    }
    public static void main(String[] args) throws InvalidKeyException, NoSuchAlgorithmException, Exception, Exception, Exception {
        String sr = "dasasdas";
        PrivateKey pk = initPrivateKey("D:\\secretkey\\OpenSSL\\bin\\test_private_key.key", "12345");
        String msg = signPrivateKey(sr, pk,"utf-8");
        System.out.println(msg);
       
//        String publickey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDhaRco+RYyPOmnTmT+YO6svwP9bZoNY0mWm4/saGfRbWVeIleoxOKMII7S3/ZG1816pB2OJ04hT0DCad/kcPdyh1uCgISKQa5mhZfnzuNEV4P+IJM5GITf7h6PRIhOZD+XwpZbjYKyon+NJQyUdNtQslnJ+dOM8Gi59o7aGYXtAQIDAQAB";
       
        PublicKey pubk = initPublicKey("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCp25k4FVKXP8uhTCykknGKRWpNWonmBWuqFx2ZdWJ+pzw9ndg957X8kAXSeyii0Bef2hXWRJwdveY//XuEdRRuQr99ycOHuiSwj4Mt6S/nKf7unDWKBeVEGcSXBQNQEciiCFOVb7stSkqQ2aBms6uHQexeTjz7MFKsXT3cFBwCpwIDAQAB");
       
        boolean b = verifyPublicKey(sr, msg, pubk);
       
        System.out.println(b);
    }
}

分享到:
评论

相关推荐

    C# RSA加密、解密、加签、验签、支持JAVA格式公钥私钥、PEM格式公钥私钥、.NET格式公钥私钥

    C# RSA加密、解密、加签、验签、支持JAVA格式公钥私钥、PEM格式公钥私钥、.NET格式公钥私钥 对应文章: http://blog.csdn.net/gzy11/article/details/54573973

    RSAUtil工具类

    RSAUtil工具类

    RSAUtil-master.zip

    这个"RSAUtil-master.zip"压缩包文件包含了使用.NET框架和C#语言实现的RSA加解密代码,这对于开发人员来说是一个宝贵的资源,可以帮助他们理解并实现在C#项目中应用RSA算法。 首先,RSA的核心原理是基于大数因子...

    RsaUtil.rar

    标题中的“RsaUtil.rar”指的是一个包含RSA(Rivest-Shamir-Adleman)加密算法相关工具或类库的压缩文件。RSA是一种非对称加密算法,广泛应用于网络安全,如数字签名、数据加密等领域。这个RAR文件可能包含了用C#...

    RSAUtil.cs

    RSAUtil.cs

    RSAUtil.java.zip

    - `generateKeyPair(int keySize)`: 生成指定密钥长度的公私钥对。 - `encrypt(byte[] plaintext, PublicKey publicKey)`: 使用公钥加密明文。 - `decrypt(byte[] ciphertext, PrivateKey privateKey)`: 使用私钥...

    RSAUtil[1]

    在"RSAUtil[1]"这个项目中,可能包含了上述过程的C++实现,如大数运算库、密钥生成函数、加密解密函数等。备份文件"RSAUtil.backup.2004-12-18 10-05-49"可能是源代码在特定时间的版本,用于恢复或对比历史代码变化...

    RSAUtil.java

    RSA工具类,用于密码加密,解密,RSA公开密钥密码体制是一种使用不同的加密密钥与解密密钥,“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制

    rsa生成私钥密钥

    在提供的`Base64.java`和`RSAUtil.java`文件中,可能包含了将生成的公钥和私钥进行Base64编码以便于存储和传输的代码。Base64是一种常见的字符编码方式,可以将二进制数据转换为ASCII字符串,便于在网络上传输。 ...

    RSAUtil 加解密工具

    非对称加密RSA算法的工具类,详细的写了多个方法讲解!

    zxing 生成二维码和解析二维码 SHA1withRSAUtil 证书签名算法

    public class RSAUtil { private static final String ALGORITHM = "RSA"; public static KeyPair generateKeyPair() throws NoSuchAlgorithmException { KeyPairGenerator keyGen = KeyPairGenerator....

Global site tag (gtag.js) - Google Analytics