祝福所有人 我想知道如何在java中为某些东西进行良好的加密和解密 并且任何人都可以解密加密的东西吗?
答案 0 :(得分:4)
总是有可能的。加密/解密仅与底层算法一样好。如果有足够的时间和计算能力,任何事情都可以做到。
答案 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;
}