Rsa 加密解密 java

来源:互联网 发布:license 开发 node 编辑:程序博客网 时间:2024/06/10 01:17

前言

RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。1987年7月首次在美国公布,当时他们三人都在麻省理工学院工作实习。RSA就是他们三人姓氏开头字母拼在一起组成的 [ 百度百科 ]

开始

1 .Java中RSA加密解密和.Net 、Php 有点不同,公钥私钥必须使用PKCS8格式,而.Net、Php却不需要。

2 .加密代码如下,注意其中publicCertificate 是PKCS8格式:

    @Override    public String rsaEncode(String publicCertificate, String text) {        try {             byte[] publicBytes =baseStrToByte(publicCertificate);            X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicBytes);            KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);            PublicKey pubKey = keyFactory.generatePublic(keySpec);            try {                // get an RSA cipher object and print the provider                final Cipher cipher = Cipher.getInstance(ALGORITHM);                // encrypt the plain text using the public key                cipher.init(Cipher.ENCRYPT_MODE, pubKey);                byte[] cipherBytes = cipher.doFinal(text.getBytes(CharSet));                String encodestr = baseByteToStr(cipherBytes);                return encodestr;            } catch (Exception e) {                e.printStackTrace();            }        } catch (Exception e) {            e.printStackTrace();        }        return null;    }

3 .解密代码,注意其中privateCertificate是PKCS8格式

   @Override    public String rsaDecode(String privateCertificate, String text) {        try {            byte[] privateBytes = baseStrToByte(privateCertificate);            PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateBytes);            KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);            PrivateKey priKey = keyFactory.generatePrivate(keySpec);            byte[] cipherText = null;            try {                // get an RSA cipher object and print the provider                final Cipher cipher = Cipher.getInstance(ALGORITHM);                // encrypt the plain text using the public key                cipher.init(Cipher.DECRYPT_MODE, priKey);                byte[] textbyte = baseStrToByte(text);                cipherText = cipher.doFinal(textbyte);                String decodestr = new String(cipherText, CharSet);                return decodestr;            } catch (Exception e) {                e.printStackTrace();            }        } catch (Exception e) {            e.printStackTrace();        }        return null;    }

4 .辅助方法

 /**     * @Description (TODO)     * @param str     * @return     */    private byte[] baseStrToByte(String str) {        return Base64.getDecoder().decode(str);    }    /**      * @Description (TODO)     * @param bytes     * @return     */    private String baseByteToStr(byte[] bytes) {        return Base64.getEncoder().encodeToString(bytes);    }

结束

附上单元测试图片一张:
单元测试

原创粉丝点击