丫丫狸笫 2015-12-01 02:55 采纳率: 0%
浏览 1744

C#加密 Java解密 不成功

最近遇到一个问题 C#DES加密
A加密一段URL,发给B,B用的是Java解密,而A用的是C#加密
本来也没有多大问题,可是两边没有商榷好
解密:Java利用已有password生成密钥key,

        KeyGenerator keyGenerator = KeyGenerator.getInstance(DES);  
        keyGenerator.init(new SecureRandom(key));  
        SecretKey securekey = keyGenerator.generateKey();  

      // Cipher对象实际完成加密操作
     Cipher cipher = Cipher.getInstance(DES);

      // 用密钥初始化Cipher对象
     cipher.init(Cipher.DECRYPT_MODE, securekey);//, sr

然而,C#中使用的是取已有password的前8个字节,
B已与其他测试完毕,但与A仍无法解密成功。
所以,我想问,在B不变的情况下,A如何在C#的环境下,实现利用已有password生成密钥。。。。

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-04 21:40
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    要解决这个问题,首先我们需要了解密码学的基本原理。在C#中,我们不能直接从字符串获取一个密钥。这是因为密钥是根据算法(如DES)来计算的,而不是由字符串提供。如果你想要在C#中使用DES算法进行加密,你需要先将原始数据转换为密文,然后才能提取出密钥。

    在Java中,你可以使用SecretKeySpec类来创建一个秘密键,这个秘密键包含了你想要使用的DES算法和密钥。以下是一个简单的示例:

    import javax.crypto.Cipher;
    import javax.crypto.spec.SecretKeySpec;
    
    public class Main {
        public static void main(String[] args) throws Exception {
            String originalText = "Hello World";
            byte[] encryptedBytes = encrypt(originalText);
            
            String decryptedText = decrypt(encryptedBytes);
            System.out.println(decryptedText);
        }
    
        private static byte[] encrypt(String text) throws Exception {
            SecretKeySpec keySpec = new SecretKeySpec("secret_key".getBytes(), "DES");
            Cipher cipher = Cipher.getInstance("DES");
            cipher.init(Cipher.ENCRYPT_MODE, keySpec);
    
            return cipher.doFinal(text.getBytes());
        }
    
        private static String decrypt(byte[] bytes) throws Exception {
            SecretKeySpec keySpec = new SecretKeySpec("secret_key".getBytes(), "DES");
            Cipher cipher = Cipher.getInstance("DES");
            cipher.init(Cipher.DECRYPT_MODE, keySpec);
    
            return new String(cipher.doFinal(bytes));
        }
    }
    

    在这个例子中,我们首先创建了一个秘密键,然后使用它来对原始文本进行加密。然后,我们再次使用同样的秘密键来解密这个文本。

    请注意,这只是一个基本的例子,实际上你需要处理更多的细节,例如错误处理、输入验证等。此外,你应该确保你的密钥足够安全,避免被破解或泄露。

    评论

报告相同问题?