关于javaRSA加密分段加密,net使用私钥加密问题
长度为 1024 位,填充方式为 PKCS#1,无加密。公钥把待加密串用 RSA 公钥加密算法加密(填充方式为 PKCS#1),再做 BASE64 编码后作为 cipher_data 字段传输。 注: 如果待加密串长度大于 117 字节,需要分段加密(每 117 字节分为一段,加密后长为 128 字节),再按顺序拼接成密串(长度为 128 的整数倍字节)
公钥:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDZFE9MmaPMQ9djE9aPTnKYgoHeVgJ2k65Ogl8Tmuz+zcrMKfve6emVzlKMAKPeULH4FFAUqjA7+ysHFQbjOFj8vhuJZu1U2tWhDc98bBYTqQDy+uHRVb9iWIrvPK51w5LKuf/ohJZRNFl8ZL4ZaynGgcWnHq2ZXq7XsOKCj9BixQIDAQAB
私钥:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBANkUT0yZo8xD12MT1o9OcpiCgd5WAnaTrk6CXxOa7P7Nyswp+97p6ZXOUowAo95QsfgUUBSqMDv7KwcVBuM4WPy+G4lm7VTa1aENz3xsFhOpAPL64dFVv2JYiu88rnXDksq5/+iEllE0WXxkvhlrKcaBxacerZlertew4oKP0GLFAgMBAAECgYA+qZQygm87+aFlIkbfWz/NMm8WpTFU1VCNrSiQ2jnrW7BcuwnP0Snyanp9m3myJQ0alZKARJhj2B8VjkZMtOlKk3dtMMAvirabPjKZMWR7clpwbhTe2WaNwLe8ADZUcBAzXEROfwSJanUgnGnBo4KwtqUqyUPrKUdP9xAy5Ge0gQJBAP8rFn5K1IALAj+cUIzZVm9Z30uEbMgEd6wVp088OAvrfJ1F+AV2ntHVqfMNc0Nz7iqy74dbyiHEcHewp9nXn3ECQQDZyXDErMgky+SX1IJXmJVnCnIos/VezxdJCANf7FiIXSFJoVrXQgIhJcliQiwh9+Dtr9UVztcY8OG84wRauvaVAkAeQaKyKPdXk3aZylQ2z1KTc4mpr7MiaH00N4EWQSK4Lx0gnPpS04Tzhq1XN6ISPn3gLEWAvF6UcHGRj63ng8zRAkEAgeP5xONED2YntUJCZtoTKTx6r7n8+wnKWn1T/e7pMpNQ2ihJFJ9Cw+BUhqzuw2eimEBJd1NAyJhKGizPmQlvLQJBAMujMJXCIXOjmPkC4u9+W79MmJPgriXrM9U2P1jSgkY2w4V04EovtFAJKjDnmyt/5b0g2pW5nwb0LV7rqtvnyEw=
JAVA加密代码:
/**
* 加密算法RSA
*/
public static final String KEY_ALGORITHM = "RSA";
/**
* 签名算法
*/
public static final String SIGNATURE_ALGORITHM = "MD5withRSA";
/**
* 获取公钥的key
*/
private static final String PUBLIC_KEY = "RSAPublicKey";
/**
* 获取私钥的key
*/
private static final String PRIVATE_KEY = "RSAPrivateKey";
/**
* RSA最大加密明文大小
*/
private static final int MAX_ENCRYPT_BLOCK = 117;
/**
* RSA最大解密密文大小
*/
private static final int MAX_DECRYPT_BLOCK = 128;
/**
* <p>
* 公钥加密
* </p>
*
* @param data
* 源数据
* @param publicKey
* 公钥(BASE64编码)
* @return
* @throws Exception
*/
public static byte[] encryptByPublicKey(byte[] data, String publicKey)
throws Exception {
byte[] keyBytes = Base64Utils.decode(publicKey);//BASE64字符串解码转为二进制数据
//byte[] keyBytes = publicKey.getBytes();//BASE64字符串解码转为二进制数据
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
Key publicK = keyFactory.generatePublic(x509KeySpec);
// 对数据加密
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.ENCRYPT_MODE, publicK);
int inputLen = data.length;
ByteArrayOutputStream out = new ByteArrayOutputStream();
int offSet = 0;
byte[] cache;
int i = 0;
// 对数据分段加密
while (inputLen - offSet > 0) {
if (inputLen - offSet > MAX_ENCRYPT_BLOCK) {
cache = cipher.doFinal(data, offSet, MAX_ENCRYPT_BLOCK);
} else {
cache = cipher.doFinal(data, offSet, inputLen - offSet);
}
out.write(cache, 0, cache.length);
i++;
offSet = i * MAX_ENCRYPT_BLOCK;
}
byte[] encryptedData = out.toByteArray();
out.close();
return encryptedData;
}
如何做到net使用私钥对称加密?提供代码