`
caniggia1986
  • 浏览: 151529 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

RSA使用X509EncodedKeySpec、PKCS8EncodedKeySpec生成公钥和私钥

阅读更多
	private static final String KEY_ALGORITHM = "RSA";  
	private static final String PUBLIC_KEY ="publicKey";
	private static final String PRIVATE_KEY ="privateKey"; 
        public static void main(String[] args) throws Exception{
		Map<String,String> keyMap = genKey();
		RSAPublicKey publicKey = getPublicKey(keyMap.get(PUBLIC_KEY));
		RSAPrivateKey privateKey = getPrivateKey(keyMap.get(PRIVATE_KEY));
		String info ="明文123456";
		//加密
		byte[] bytes = encrypt(info.getBytes("utf-8"),publicKey);
		//解密
		bytes = decrypt(bytes, privateKey);
		System.out.println(new String(bytes,"utf-8"));
		 
	}
	
	public static Map<String,String> genKey() throws NoSuchAlgorithmException{
		Map<String,String> keyMap = new HashMap<String,String>();
		KeyPairGenerator keygen = KeyPairGenerator.getInstance(KEY_ALGORITHM);
		SecureRandom random = new SecureRandom();
		// random.setSeed(keyInfo.getBytes());
		// 初始加密,512位已被破解,用1024位,最好用2048位
		keygen.initialize(1024, random);
		// 取得密钥对
		KeyPair kp = keygen.generateKeyPair();
		RSAPrivateKey privateKey = (RSAPrivateKey)kp.getPrivate();
 		String privateKeyString = Base64.encode(privateKey.getEncoded());
		RSAPublicKey publicKey = (RSAPublicKey)kp.getPublic(); 
		String publicKeyString = Base64.encode(publicKey.getEncoded());
		keyMap.put(PUBLIC_KEY, publicKeyString);
		keyMap.put(PRIVATE_KEY, privateKeyString);
		return keyMap;
	}
	
	public static RSAPublicKey getPublicKey(String publicKey) throws Exception{
		byte[] keyBytes = LBase64.decode(publicKey);
		X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);
		KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
		return (RSAPublicKey) keyFactory.generatePublic(spec);
	}
	
	public static RSAPrivateKey getPrivateKey(String privateKey) throws Exception{
		byte[] keyBytes = LBase64.decode(privateKey);
		PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
		KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
		return (RSAPrivateKey) keyFactory.generatePrivate(spec);
	}

分享到:
评论

相关推荐

    C# pkcs8加解密

    PKCS#8是一种公钥加密标准,全称为“Public-Key Cryptography Standards #8”,由RSA Security提出,主要用于存储和交换加密私钥。在C#环境中,处理PKCS#8格式的密钥可以用于实现与Java平台的互操作性,因为Java广泛...

    RSA在C#和java中的应用

    在跨语言通信中,如C#与Java之间,为了保证公钥和私钥的兼容性,我们需要遵循相同的密钥格式标准,如X.509或PKCS#8。C#中的`RSACryptoServiceProvider`可以通过`ExportCspBlob(true/false)`导出和导入密钥,而Java...

    获取RSA公钥+私钥

    在Java中,我们可以使用Java Cryptography Extension (JCE) 库来生成和操作RSA密钥对,包括公钥和私钥。 生成RSA公钥和私钥的基本步骤如下: 1. **创建KeyPairGenerator对象**:首先,我们需要创建一个...

    Java 生成RSA密钥进行数据加密解密 支持超长字符分区

    RSA是一种非对称加密算法,它基于两个不同的密钥:公钥和私钥。公钥用于加密,而私钥用于解密。这种机制使得只有持有私钥的一方才能解密由公钥加密的数据,从而确保数据的安全性。 首先,要生成RSA密钥对,可以使用...

    RSA加解密的JAVA实现

    首先,我们需要生成一对公钥和私钥,这通常通过`KeyPairGenerator`类来完成。以下是一段创建RSA密钥对的示例代码: ```java KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); keyGen.initialize...

    Java实现的数字签名算法RSA完整示例

    PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded()); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PrivateKey privateKey = keyFactory....

    C# RSA读取密钥文件pfx cer 签名验签加密解密帮助类

    在Java端,你可以使用`java.security.KeyFactory`和`java.security.spec.PKCS8EncodedKeySpec`(对于私钥)或`java.security.spec.X509EncodedKeySpec`(对于公钥)来导入这些PEM字符串。 总结一下,C#中处理RSA...

    Android数据加密之Rsa加密

    RSA是一种非对称加密算法,它使用一对密钥,即公钥和私钥,来进行加密和解密操作。 首先,了解什么是RSA加密。RSA算法由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,它的核心在于两个大质数的乘积和它们...

    java RSA加密解密

    - 将密钥转换为字符串格式,以便于存储和传输,可以使用`X509EncodedKeySpec`和`PKCS8EncodedKeySpec`,配合`KeyFactory`进行编码和解码。 3. **加密**: - 使用`Cipher`类的`getInstance("RSA/ECB/PKCS1Padding...

    RSA加密解密java实例

    我们可以使用`java.security.KeyFactory`和`java.security.spec.X509EncodedKeySpec/PKCS8EncodedKeySpec`将密钥转换为Base64编码的字符串。 3. **加密过程**:使用公钥进行加密。获取公钥后,使用`Cipher`类的`...

    RSA前台加密java后台解密项目

    例如,使用Forge库,可以生成公钥和私钥,然后用公钥加密数据,代码示例如下: ```javascript var forge = require('forge'); var pki = forge.pki; var rsa = forge.rsa; // 生成RSA key pair var keys = pki.rsa...

    java实现RSA加密

    1. **构建密钥对**:甲方生成一对密钥——公钥和私钥,并将公钥公开给乙方,而私钥则需妥善保管。 2. **数据加密与签名**:甲方使用私钥对数据进行加密,并对加密后的数据进行签名,然后将签名和加密的数据一起发送...

    java RSA公钥加密算法完整源代码

    对于私钥,可以使用`PKCS8EncodedKeySpec`和`PrivateKeyFactory`。 5. **源代码结构**:提供的Java版RSA公钥加密源代码可能包含以下部分: - 密钥对生成:包括密钥长度设定、KeyPairGenerator的使用。 - 加密:...

    java 非对称加密算法RSA实现详解

    X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(publicKey.getEncoded()); KeyFactory publicKeyFactory = KeyFactory.getInstance("RSA"); PublicKey pubKey = publicKeyFactory.generatePublic...

    RSA组件,前台js加密,后台java解密

    RSA算法是一种非对称加密算法,它基于两个不同的密钥:公钥和私钥。在本文中,我们将深入探讨如何在前端使用JavaScript进行RSA加密,以及如何在后端使用Java进行解密。同时,我们还会提及如何在会话(Session)中...

    获取 RSA秘钥 3个方法

    PKCS8EncodedKeySpec privKeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(pemKey.getBytes())); PrivateKey privateKey = keyFactory.generatePrivate(privKeySpec); in = new BufferedReader(new ...

    Rsa公私钥的生成java版本

    使用生成的公钥和私钥进行加密和解密操作: ```java Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); // 使用RSA算法,ECB模式,PKCS1填充 // 加密 cipher.init(Cipher.ENCRYPT_MODE, publicKey); ...

    JAVA RSA密钥对的生成与验证

    这段代码首先获取了RSA密钥生成器,然后初始化为2048位长度(为了安全性,通常选择较长的密钥长度),最后生成并分离出公钥和私钥。 接下来,我们可以使用公钥对数据进行加密,私钥进行解密。例如: ```java ...

    JS客户端RSA加密,Java服务端解密

    该算法包含两个密钥:公钥和私钥。公钥可以公开,用于加密数据;而私钥必须保密,用于解密数据。由于加密和解密使用的是不同的密钥,因此非对称加密提供了比对称加密更高的安全性。 **JavaScript客户端RSA加密** 在...

    Java实现RSA算法的方法详解

    密钥生成是指生成公钥和私钥的过程,公钥用于加密,私钥用于解密。加密是指使用公钥对数据进行加密的过程,解密是指使用私钥对加密数据进行解密的过程。 Java实现RSA算法的方法主要包括以下步骤: 1. 密钥生成:...

Global site tag (gtag.js) - Google Analytics