Java与.Net环境下RSA加密解密交互不成功
由于项目需要,我们要实现Java环境下面用RSA公钥对信息加密、然后在.Net环境下面用RSA私钥解密的这个功能;但经过测试之后发现:原来跨平台间的交互还是存在很多障碍的,各平台对标准的支持度相差太多;直接体现就是本平台内加密之后解密没有问题,但是一方加密,另外一方解密就不行!!
java实现代码:
public class Proxy {
/***************************
* 加密--公钥加密
* pubPath 公钥path
* userInfo 加密前数据
* return 加密之后的数据
***************************/
public static String encryptUserInfo(String pubPath, String userInfo)
throws Exception {
RSAPublicKey recoveryPubKey = RSAUtil.readX509PublicKey(pubPath);
byte[] raw = userInfo.getBytes();
raw = RSAUtil.encrypt(recoveryPubKey, raw);
BASE64Encoder encoder = new BASE64Encoder();
String base64data = encoder.encode(raw);
return base64data;
}
/***************************
* 签名--私钥签名
* priPath 私钥
* userInfo 信息加密前数据
***************************/
public static String signUserInfo(String priPath, String userInfo)
throws Exception {
RSAPrivateKey recoveryPriKey = RSAUtil.readPKCS8PrivateKey(priPath);
byte[] raw = userInfo.getBytes();
raw = RSAUtil.getSHA1(userInfo);
raw = RSAUtil.encrypt(recoveryPriKey,raw);
BASE64Encoder encoder = new BASE64Encoder();
String base64data = encoder.encode(raw);
return base64data;
}
}
public class RSAUtil {
/**
* 从文件中读取X509格式的公钥
*
* @param path
* @return
* @throws Exception
*/
public static RSAPublicKey readX509PublicKey(String path) throws Exception {
FileInputStream public_file_in = new FileInputStream(path);
byte pub_key_bs[] = new byte[1024];
public_file_in.read(pub_key_bs);
X509EncodedKeySpec spec = new X509EncodedKeySpec(pub_key_bs);
KeyFactory kfac = KeyFactory.getInstance("RSA");
RSAPublicKey public_key = (RSAPublicKey) kfac.generatePublic(spec);
public_file_in.close();
return public_key;
}
/**
* 从文件中读取KPCS8格式的私钥
*
* @param path
* 读取的文件名
* @return
* @throws Exception
*/
public static RSAPrivateKey readPKCS8PrivateKey(String path)
throws Exception {
FileInputStream private_file_in = new FileInputStream(path);
byte pri_key_bs[] = new byte[1024];
private_file_in.read(pri_key_bs);
PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(pri_key_bs);
KeyFactory kfac = KeyFactory.getInstance("RSA");
RSAPrivateKey private_key = (RSAPrivateKey) kfac.generatePrivate(spec);
private_file_in.close();
return private_key;
}
}
哪位大虾能用c#来实现一下 encryptUserInfo 和 signUserInfo !重谢 :) --------------------编程问答-------------------- 不懂,帮顶。 --------------------编程问答-------------------- 今天的第一贴,板凳,哈哈 --------------------编程问答-------------------- 没看到人气这么差的,up一下 --------------------编程问答-------------------- 跨平台的加解密操作?只有来学习的份了 --------------------编程问答-------------------- 冒泡帮顶接分
每天一贴得分 --------------------编程问答-------------------- 关注,帮顶 --------------------编程问答-------------------- 关注并学习,没有接触过这些。。。。 --------------------编程问答-------------------- 以前做过类似的事情,但也没成功,后来没用这个方法,希望会的牛人帮忙解决一下,这里收藏帮顶了! --------------------编程问答-------------------- 很关注,这个问题很有意思。学习,帮忙顶了
补充:.NET技术 , .NET Framework