美文网首页
RSA 非对称加密

RSA 非对称加密

作者: 账号已被注销 | 来源:发表于2019-07-05 22:44 被阅读0次

源码地址放在文章末尾


package Mr.He;

import javax.crypto.Cipher;
import java.security.*;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;

/**
 * RSA加密演示
 * @author wishforyou.xia@gmail.com
 * @date 2019/7/3 23:22
 */
public class RsaDemo {
    private static final String STRING = "missyou";

    public static void main(String[] args) throws Exception {
        Map<String, Key> keyMap = createKey();
        String publicKeyString = keyToString(keyMap.get("publicKay"));
        String privateKeyString = keyToString(keyMap.get("privateKey"));
        System.out.println("公钥:" + publicKeyString);
        System.out.println("私钥:" + privateKeyString);

        String encodeStr = encode(keyMap.get("publicKay"));
        System.err.println("加密后的字符串为:" + encodeStr);

        String decodeStr = decode(keyMap.get("privateKey"),encodeStr);
        System.out.println("还原后的字符串为:" + decodeStr);

    }

    private static String decode(Key key,String encodeStr) throws Exception {
        /**
         * 使用字符串作为密钥时需要转回key
         * String keyString = new String(Base64.getEncoder().encode(key.getEncoded()));
         * byte[] keyByte = Base64.getDecoder().decode(keyString);
         * RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(keyByte));
         *
         */

        byte[] strByte = Base64.getDecoder().decode(encodeStr);
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE,key);
        byte[] decodeByte = cipher.doFinal(strByte);
        String decodeString = new String(decodeByte);
        return decodeString;
    }

    private static String encode(Key key) throws Exception {
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE,key);
        byte[] encodeByte = cipher.doFinal(STRING.getBytes("UTF-8"));
        byte[] base64Byte = Base64.getEncoder().encode(encodeByte);
        String string = new String(base64Byte);
        return string;
    }

    private static Map<String, Key> createKey() throws NoSuchAlgorithmException {
        KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
        keyPairGen.initialize(512,new SecureRandom("missyou".getBytes()));
        KeyPair keyPair = keyPairGen.generateKeyPair();
        PublicKey publicKey = keyPair.getPublic();
        PrivateKey privateKey = keyPair.getPrivate();
        Map<String, Key> key = new HashMap<>(2);
        key.put("publicKay",publicKey);
        key.put("privateKey",privateKey);
        return key;
    }

    private static <T extends Key> String keyToString(T key){
         byte[] keyByte = key.getEncoded();
         String keyString = new String (Base64.getEncoder().encode(keyByte));
         return keyString;
    }

}

/**
*  源码地址github
*/
https://github.com/HeQuanX/learning

相关文章

  • kotlin版本RSA非对称加密解密与分段加密解密

    基于kotlin语言的RSA非对称加密解密与分段加密解密 RSA非对称加密 RSA非对称加密的具体算法与来源我就不...

  • 非对称加密算法RSA 学习

    非对称加密算法RSA 学习 RSA加密算法是一种非对称加密算法。RSA是1977年由罗纳德·李维斯特(Ron Ri...

  • RSA加密

    RSA加密为非对称加密实现 对称加密:加密解密使用同一个算法 非对称加密:加密和解密使用不同算法 rsa加密原理 ...

  • 3.2 RSA算法简介

    非对称加密技术 -- RSA算法 RSA算法是流行最广泛的非对称加密算法,也是唯一的基于因式分解的非对称加密算法。...

  • 非对称加密

    非对称加密 非对称加密算法有:RSA,DSA,ECC,DH.其中RSA最为常用. 非对称加密一般有一对公钥和私钥,...

  • RSA非对称加密

    RSA非对称加密 RSA非对称加密, 适用于Java和iOS 应用场景:用户登录时对登录密码进行加密 启动终端, ...

  • 6.1 密码学专题 - 非对称加密算法 - RSA 算法

    密码学专题 - 非对称加密算法 - RSA 算法 6.1 RSA 算法 第一个较完善的非对称加密算法 RSA,它既...

  • iOS-对称加密和(rsa)非对称加密

    说起rsa,大家自然就会说,非对称加密嘛。是的,rsa非对称加密算是安全级别非常高的加密方式,至少对于现在而言。这...

  • 密码学基础(三):非对称加密(RSA算法原理)

    什么是RSA加密 加密和解密使用的是两个不同的秘钥,这种算法叫做非对称加密。非对称加密又称为公钥加密,RSA只是公...

  • ios开发之证书和签名机制(一)

    非对称加密和摘要 1、非对称加密的特性和用法 1) 非对称加密算法(RSA):非对称加密算法指加密秘钥和解密秘钥是...

网友评论

      本文标题:RSA 非对称加密

      本文链接:https://www.haomeiwen.com/subject/srgyhctx.html