关于javaRSA加密分段加密,net使用私钥加密问题

a2791196 2017-05-23 10:57:02
长度为 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使用私钥对称加密?提供代码
...全文
1209 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Leckun 2017-06-28
  • 打赏
  • 举报
回复
没听懂你说什么
IT小金 2017-06-26
  • 打赏
  • 举报
回复
求大神解决办法

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧