C#和Java实现互通的RSA&DES加解密算法(二)

这篇博客详细介绍了如何在Java中实现RSA和DES的加解密算法,包括RSA的字符串加密、解密、签名和验证签名,以及DES的加密和解密。代码示例提供了完整的加密和解密方法,便于C#和Java之间的互通使用。
摘要由CSDN通过智能技术生成

2 Java部分

2.1 RSA加密

2.1.1 返回字符串

    /// <summary>
    /// RSA字符串加密(加密最大长度为117字节)
    /// </summary>
    /// <param name="data">待加密字符串</param>
    /// <param name="keyFile">公钥文件路径</param>    
    /// <returns>加密后的字节数组base64后的字符串</returns>
    public static String RSAEncryptStr(String data, String keyFile) {
        try {
            KeyFactory fact = KeyFactory.getInstance("RSA");
            
            // 读取公钥
            readKeyFromFile(keyFile);            
            byte[] modulusBytes = Base64.decode(module);
            byte[] exponentBytes = Base64.decode(exponentString);
            BigInteger modulus = new BigInteger(1, modulusBytes);
            BigInteger exponent = new BigInteger(1, exponentBytes);
            RSAPublicKeySpec rsaPubKey = new RSAPublicKeySpec(modulus, exponent);            
            PublicKey pubKey = fact.generatePublic(rsaPubKey);

            Cipher cipher = Cipher.getInstance("RSA");            
            cipher.init(Cipher.ENCRYPT_MODE, pubKey);            
            byte[] byteCipherData = cipher.doFinal(data.getBytes());
            
            String strEncrypt = Base64.encode(byteCipherData);
            return strEncrypt;
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;

    }

2.1.2 返回字节数组

    /// <summary>
    /// RSA字符串加密(加密最大长度为117字节)
    /// </summary>
    /// <param name="data">待加密字符串</param>
    /// <param name="keyFile">公钥文件路径</param>    
    /// <returns>加密后的字节数组</returns>
    public static byte[] RSAEncrypt(String data, String keyFile) {
        try {
            KeyFactory fact = KeyFactory.getInstance("RSA");
            
            // 读取公钥
            readKeyFromFile(keyFile);            
            byte[] modulusBytes = Base64.decode(module);
            byte[] exponentBytes = Base64.decode(exponentString);
            BigInteger modulus = new BigInteger(1, modulusBytes);
            BigInteger exponent = new BigInteger(1, exponentBytes);
            RSAPublicKeySpec rsaPubKey = new RSAPublicKeySpec(modulus, exponent);            
            PublicKey pubKey = fact.generatePublic(rsaPubKey);

            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.ENCRYPT_MODE, pubKey);
            byte[] byteCipherData = cipher.doFinal(data.getBytes());
            return byteCipherData;
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

好的,针对您的问题,我可以给您提供一些参考。 DES算法加密解密示例代码: ```csharp using System; using System.IO; using System.Security.Cryptography; public class DESExample { private static readonly byte[] Key = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 }; private static readonly byte[] IV = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 }; public static void EncryptFile(string inputFilePath, string outputFilePath) { using var des = new DESCryptoServiceProvider(); using var inputStream = new FileStream(inputFilePath, FileMode.Open, FileAccess.Read); using var outputStream = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write); des.Key = Key; des.IV = IV; using var encryptor = des.CreateEncryptor(); using var cryptoStream = new CryptoStream(outputStream, encryptor, CryptoStreamMode.Write); inputStream.CopyTo(cryptoStream); cryptoStream.FlushFinalBlock(); } public static void DecryptFile(string inputFilePath, string outputFilePath) { using var des = new DESCryptoServiceProvider(); using var inputStream = new FileStream(inputFilePath, FileMode.Open, FileAccess.Read); using var outputStream = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write); des.Key = Key; des.IV = IV; using var decryptor = des.CreateDecryptor(); using var cryptoStream = new CryptoStream(inputStream, decryptor, CryptoStreamMode.Read); cryptoStream.CopyTo(outputStream); outputStream.Flush(); } } ``` RSA算法加密解密示例代码: ```csharp using System; using System.IO; using System.Security.Cryptography; public class RSAExample { private static readonly string PublicKey = "<RSAKeyValue><Modulus>oKI2Hxg7K5Hd6d8DT7+7p6vqoLJpFwNpkBzv/k4rZKw86hs2Gx9zTt2+JzLJ3VYsZq8YfK0V0d85t2c+Jq3D7BjnsiP9i4j6kOaRc7v7GKv4rRAc7S6t7WhrFVg+KQ9dZ5iM6NhrX7oOqB5hLb7p9eN+5VB9X4IWFSz+Q3YE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>"; private static readonly string PrivateKey = "<RSAKeyValue><Modulus>oKI2Hxg7K5Hd6d8DT7+7p6vqoLJpFwNpkBzv/k4rZKw86hs2Gx9zTt2+JzLJ3VYsZq8YfK0V0d85t2c+Jq3D7BjnsiP9i4j6kOaRc7v7GKv4rRAc7S6t7WhrFVg+KQ9dZ5iM6NhrX7oOqB5hLb7p9eN+5VB9X4IWFSz+Q3YE=</Modulus><Exponent>AQAB</Exponent><P>6DdR7M/CuFjyF3v6MfTnW8MhFwM8Wt4GpBZG9e+y5L8=</P><Q>6J3f2gPQy7E1k1PbR+0WwC5yZPQ/N4WZ4GQvyXq1r5I=</Q><DP>bqbN+qWZJ+Oul9F73BvKm4JNm91qMpbkzqx4WovhD9k=</DP><DQ>Y7e4CKD+5pwu7e4oCzIYs0E3LlUWJf4LkLwN+3Q6w6U=</DQ><InverseQ>g4TlKvQf7r6jVQK2lRrV4Zar0hN6I4oWU1Lm9p1zvAo=</InverseQ><D>aeHvIhO4+Yk7bW+4qo7w5yJjWjyWz3mVW5l1mLb0h8JtPZV12qY8jMHZ0cNzUJ7a1Z1IjWkN73uU+qT0O4O5ZQK0ZyO0zj8FIAJn5wJj7rP8Lw5Ll5Qk7K1jy6h0J0O3mY9Hf6Lg2X4L2u6G4LrD5kiJ8Y2nWZL3V7E0e6YB0=</D></RSAKeyValue>"; public static void EncryptFile(string inputFilePath, string outputFilePath) { using var rsa = new RSACryptoServiceProvider(); rsa.FromXmlString(PublicKey); using var inputStream = new FileStream(inputFilePath, FileMode.Open, FileAccess.Read); using var outputStream = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write); using var encryptor = rsa.CreateEncryptor(); using var cryptoStream = new CryptoStream(outputStream, encryptor, CryptoStreamMode.Write); inputStream.CopyTo(cryptoStream); cryptoStream.FlushFinalBlock(); } public static void DecryptFile(string inputFilePath, string outputFilePath) { using var rsa = new RSACryptoServiceProvider(); rsa.FromXmlString(PrivateKey); using var inputStream = new FileStream(inputFilePath, FileMode.Open, FileAccess.Read); using var outputStream = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write); using var decryptor = rsa.CreateDecryptor(); using var cryptoStream = new CryptoStream(inputStream, decryptor, CryptoStreamMode.Read); cryptoStream.CopyTo(outputStream); outputStream.Flush(); } } ``` 以上代码仅供参考,具体实现需要根据您的需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值