Java中简单的一行本地加密/解密方法

6

在Java中,是否有一种非常简单的本地方法来使用密钥加密/解密字符串?我并不太关心使用何种类型的加密(如AES、DES等),我只关心它是由密钥绑定且不容易被破解。

理想情况下,我希望它是一行代码解决的,就像这样:

String encryptedString = NativeEncryptionClass.encrypt("this is the data", "key123");

谢谢


你有没有尝试过在谷歌上搜索“java AES”? - Joao
我已经谷歌过了,但还没有找到不创建自己的方法实现我想要的功能的方法。我不介意这样做,只是希望有一种内置于Java中的简单的一行代码加密字符串的方式 - 对于我们这些只需要将加密过程抽象化为一个极其简单的方法的人来说。 - Tyler Murry
写你自己的代码。你需要理解算法的机制,才能正确地设置默认值,因此编写代码的工作量是最小的。 - Hot Licks
5个回答

3

不确定您是否可以用易读的一行代码实现,但您可以相对轻松地实现简单的对称加密-请看以下示例:

使用DES的PrivateExample

我过去曾经成功地使用Bouncy Castle库。


1
最好使用AES。DES已经过时且速度较慢。 - rossum

2
也许你应该尝试使用简单的XOR加密。

1
下投票者:实际上,使用一次性密码本进行异或运算是最好的加密方法(如果您有安全的通信/存储“密码本”的方式)。 - Hot Licks
@TheTerribleSwiftTomato - 不,XOR比ROT13具有更强的潜在鲁棒性,因为XOR可以轻松地拥有与数据一样长的密钥,而ROT13只是它本身。 - Chris Stratton
@ChrisStratton: "potential", "can"等词语。在我看来,回答者需要明确指定使这些保证成立的确切条件。否则,答案是误导性的,因此在我看来没有用处。因此我给了负评。 - mikołak
@ChrisStratton:1. 请记得使用@。2. 我不同意:答案可以被扩展以描述最强的解决方案-它有太多的事情被省略了(比如你自己提到的密钥长度问题,密钥需要“好”的随机性等),因此并不实用-这不仅仅是可能会被误解为ROT13。如果这让你很烦恼,随时编辑答案,我会撤回我的反对票。 - mikołak
这个ROT13的答案没有可能被误解 - 它们是完全不同的机制,一个是已知最强大的机制之一,另一个则是绝对最弱的。 - Chris Stratton
显示剩余3条评论

2
如果您所说的本地是指不依赖于特定平台库,那么jasypt或许会对您有所帮助。

1

-1
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SimpleMD5Example {

    public static void main(String[] args) {
        String passwordToHash = "0";
        String generatedPassword = null;
        try {
            // Create MessageDigest instance for MD5
            MessageDigest md = MessageDigest.getInstance("MD5");
            // Add password bytes to digest
            md.update(passwordToHash.getBytes());
            // Get the hash's bytes
            byte[] bytes = md.digest();
            System.out.println(bytes);

            // This bytes[] has bytes in decimal format;
            // Convert it to hexadecimal format
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < bytes.length; i++) {
                sb.append(Integer.toString((bytes[i] & 0xff), 16).substring(1));

            }
            // Get complete hashed password in hex format
            generatedPassword = sb.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        System.out.println(generatedPassword);
    }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接