或许你可以换个思路 ,还是用java 写加密,签名,验签
然后用IKVMNET将java包转成C# dll
aspnet 直接调用这个dll 就是了
这样就不用将java 的私匙和公匙转成C#的了
我当时做一个项目就是采用的这个方法来规避 java 和 C# 在 RSA 上的不同
要直接进行java 和net交互比较难,因为net的非对称加密很好没有实现ASN1,而且net 在实现的时候 加了随机数
1、用公钥加密,用私钥解密。
2、给别人发信息,就从服务器上拉下来别人的公钥,加密后发给他。
3、对方拿到信息后用自己的私钥解密。
4、这样,公钥加密后除了私钥持有人,别人都看不到信息。
5、若是用私钥加密,那么公钥都能解密,还有何安全性可言?
6、私钥加密的场合只有一个,那就是数字签名,用来表明这个信息来源于你。
1私钥公钥不是用户自己输入的,是RSA算法自动生成的,而你输入的密码只是打开那个文件或生成的证书的密码
2密码为“changeit”,而如果尝试几次都不成功的话,就到$JAVA_HOME\jre\lib\security\目录下去配就可以了
java rsa私钥加密是什么?让我们一起来了解一下吧!
java rsa私钥加密是一种加密算法。私钥加密算法是用私钥来进行加密与解密信息。私钥加密也被称作对称加密,原因是加密与解密使用的秘钥是同一个。
RSA加密需要注意的事项如下:
1 首先产生公钥与私钥
2 设计加密与解密的算法
3 私钥加密的数据信息只能由公钥可以解密
4 公钥加密的数据信息只能由私钥可以解密
实战演练,具体步骤如下: public class RsaCryptTools { private static final String CHARSET = "utf-8"; private static final Base64Decoder decoder64 = Base64getDecoder(); private static final Base64Encoder encoder64 = Base64getEncoder(); / 生成公私钥 @param keySize @return @throws NoSuchAlgorithmException / public static SecretKey generateSecretKey(int keySize) throws NoSuchAlgorithmException { //生成密钥对 KeyPairGenerator keyGen = KeyPairGeneratorgetInstance("RSA"); keyGeninitialize(keySize, new SecureRandom()); KeyPair pair = keyGengenerateKeyPair(); PrivateKey privateKey = pairgetPrivate(); PublicKey publicKey = pairgetPublic(); //这里可以将密钥对保存到本地 return new SecretKey(encoder64encodeToString(publicKeygetEncoded()), encoder64encodeToString(privateKeygetEncoded())); } / 私钥加密 @param data @param privateInfoStr @return @throws IOException @throws InvalidCipherTextException / public static String encryptData(String data, String privateInfoStr) throws IOException, InvalidKeySpecException, NoSuchAlgorithmException, InvalidKeyException, NoSuchPaddingException, BadPaddingException, IllegalBlockSizeException { Cipher cipher = CiphergetInstance("RSA/ECB/PKCS1Padding"); cipherinit(CipherENCRYPT_MODE, getPrivateKey(privateInfoStr)); return encoder64encodeToString(cipherdoFinal(datagetBytes(CHARSET))); } / 公钥解密 @param data @param publicInfoStr @return / public static String decryptData(String data, String publicInfoStr) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeySpecException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, UnsupportedEncodingException { byte[] encryptDataBytes=decoder64decode(datagetBytes(CHARSET)); //解密 Cipher cipher = CiphergetInstance("RSA/ECB/PKCS1Padding"); cipherinit(CipherDECRYPT_MODE, getPublicKey(publicInfoStr)); return new String(cipherdoFinal(encryptDataBytes), CHARSET); } private static PublicKey getPublicKey(String base64PublicKey) throws NoSuchAlgorithmException, InvalidKeySpecException { X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64getDecoder()decode(base64PublicKeygetBytes())); KeyFactory keyFactory = KeyFactorygetInstance("RSA"); return keyFactorygeneratePublic(keySpec); } private static PrivateKey getPrivateKey(String base64PrivateKey) throws NoSuchAlgorithmException, InvalidKeySpecException { PrivateKey privateKey = null; PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(Base64getDecoder()decode(base64PrivateKeygetBytes())); KeyFactory keyFactory = null; keyFactory = KeyFactorygetInstance("RSA"); privateKey = keyFactorygeneratePrivate(keySpec); return privateKey; } / 密钥实体 @author hank @since 2020/2/28 0028 下午 16:27 / public static class SecretKey { / 公钥 / private String publicKey; / 私钥 / private String privateKey; public SecretKey(String publicKey, String privateKey) { thispublicKey = publicKey; thisprivateKey = privateKey; } public String getPublicKey() { return publicKey; } public void setPublicKey(String publicKey) { thispublicKey = publicKey; } public String getPrivateKey() { return privateKey; } public void setPrivateKey(String privateKey) { thisprivateKey = privateKey; } @Override public String toString() { return "SecretKey{" + "publicKey='" + publicKey + '\'' + ", privateKey='" + privateKey + '\'' + '}'; } } private static void writeToFile(String path, byte[] key) throws IOException { File f = new File(path); fgetParentFile()mkdirs(); try(FileOutputStream fos = new FileOutputStream(f)) { foswrite(key); fosflush(); } } public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, IOException, BadPaddingException, IllegalBlockSizeException, InvalidKeyException, InvalidKeySpecException { SecretKey secretKey = generateSecretKey(2048); Systemoutprintln(secretKey); String enStr = encryptData("你好测试测试", secretKeygetPrivateKey()); Systemoutprintln(enStr); String deStr = decryptData(enStr, secretKeygetPublicKey()); Systemoutprintln(deStr); enStr = encryptData("你好测试测试hello", secretKeygetPrivateKey()); Systemoutprintln(enStr); deStr = decryptData(enStr, secretKeygetPublicKey()); Systemoutprintln(deStr); } }
以上就是关于java的RSA私匙和公匙如何在ASP.NET中转过来,java的私匙和公匙是字符串,ASP.NET的是XML。全部的内容,包括:java的RSA私匙和公匙如何在ASP.NET中转过来,java的私匙和公匙是字符串,ASP.NET的是XML。、怎么在ios进行rsa公钥加密,java做rsa私钥解密、java使用keytool生成证书的时候怎们样设置公钥和私钥还有keystore密码是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)