当前位置:编程学习 > C#/ASP.NET >>

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
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,