加密&解密问题

时间:2010-11-08 16:10:42

标签: java encryption

祝福所有人 我想知道如何在java中为某些东西进行良好的加密和解密 并且任何人都可以解密加密的东西吗?

5 个答案:

答案 0 :(得分:4)

总是有可能的。加密/解密仅与底层算法一样好。如果有足够的时间和计算能力,任何事情都可以做到。

尝试http://www.jasypt.org/

答案 1 :(得分:3)

编辑在技术上更正确

  

...任何人都可以解密加密的东西吗?

加密算法将决定某人解密加密数据需要多长时间,例如duffymo说。

无线路由器的

WEP将是一个安全算法的一个很好的例子,它不需要花费太多时间来打破。底层加密算法(RC4)很容易被利用,因为它在错误的上下文中使用。 RC4没有损坏,设计人员使用RC4进行了错误的应用。

http://en.wikipedia.org/wiki/Wired_Equivalent_Privacy#Flaws

如果您在错误的上下文中使用加密算法,那么您可能会构建错误的安全感。

答案 2 :(得分:3)

密码学是一个历史悠久的大课程,但基本思想是你使用“秘密”来防止别人看到某些东西(数据,信息等)。有许多方法可以隐藏信息,但最好的方法是基于经过时间考验的数学上合理的算法。出于这个原因,一个外行人(即不是数学家或高级计算机科学大师)从头开始编写一个成功的加密算法是不常见的。相反,大多数人使用现有的一组算法,其中一些算法(如AES)是国际标准。这些结合了公知的“加扰”算法和只有你(或小团体)知道的小“秘密”密钥;没有密钥,你无法获取数据。

有些情况下可以使用“暴力”来获取数据 - 例如,尝试每个可能的密钥。当然,这需要时间和计算能力,并且对于足够大的密钥大小,实际上是不可能的(即,存在比宇宙中的原子数更多的可能密钥)。

因此,如果您使用一个众所周知的,经过良好测试的算法,使用大密钥,您可以非常放心,您的数据无法通过强制获取。

(当然,还有其他一些方法可以给猫皮肤打扮 - 就像打电话给你假装是一个应该知道密钥的人,然后让你告诉他们......)

每个主要加密算法都有java库,您可以在项目中使用它们(如@duffymo所说,http://www.jasypt.org/是一个很好的起点)。

答案 3 :(得分:0)

最新版本的AES应该完全适用于所有实用目的,但理论上

您可以直接使用AES和最新版本的Java。

答案 4 :(得分:0)

您可以使用密码工具进行加密和解密。 1.首先,您需要为项目导入密码

<dependency>
    <groupId>org.sonatype.plexus</groupId>
    <artifactId>plexus-cipher</artifactId>
    <version>1.1</version>
</dependency>

如果您正在使用gradle

// https://mvnrepository.com/artifact/org.sonatype.plexus/plexus-cipher
compile group: 'org.sonatype.plexus', name: 'plexus-cipher', version: '1.1'

然后你可以试试那些。

public static String encrypt(String strClearText,String strKey) throws Exception{
    String strData="";

    try {
        SecretKeySpec skeyspec=new SecretKeySpec(strKey.getBytes(),"Blowfish");
        Cipher cipher=Cipher.getInstance("Blowfish");
        cipher.init(Cipher.ENCRYPT_MODE, skeyspec);
        byte[] encrypted=cipher.doFinal(strClearText.getBytes());
        strData=new String(encrypted);

    } catch (Exception e) {
        e.printStackTrace();
        throw new Exception(e);
    }
    return strData;
}

这是解密方法。这会将加密文本和相同的密钥作为输入。

public static String decrypt(String strEncrypted,String strKey)throws Exception {     String strData =&#34;&#34 ;;

try {
    SecretKeySpec skeyspec=new SecretKeySpec(strKey.getBytes(),"Blowfish");
    Cipher cipher=Cipher.getInstance("Blowfish");
    cipher.init(Cipher.DECRYPT_MODE, skeyspec);
    byte[] decrypted=cipher.doFinal(strEncrypted.getBytes());
    strData=new String(decrypted);

} catch (Exception e) {
    e.printStackTrace();
    throw new Exception(e);
}
return strData;

}