使用标准JDK在Java中生成安全,随机的AES密钥的推荐方法是什么? 在其他文章中,我发现这一点,但使用SecretKeyFactory可能是一个更好的主意: KeyGenerator keyGen = KeyGenerator.getInstance("AES"); SecureRandom random = new SecureRandom(); // cryptograph. secure random keyGen.init(random); SecretKey secretKey = keyGen.generateKey(); 如果答案中包含了解释为什么这是生成随机密钥的好方法,那将是非常好的。 谢谢!
我正在处理的应用程序让用户encryption文件。 这些文件可以是任何格式(电子表格,文件,演示文稿等)。 对于指定的input文件,我创build了两个输出文件 – 一个encryption数据文件和一个密钥文件。 您需要这两个文件来获取您的原始数据。 密钥文件只能在相应的数据文件上工作。 它不应该在来自同一用户或任何其他用户的任何其他文件上工作。 AESalgorithm需要两个不同的encryption参数,一个密钥和一个初始化向量(IV)。 我看到了三个创build密钥文件的select: 在应用程序中embedded硬编码的IV,并将密钥保存在密钥文件中。 在应用程序中embedded硬编码密钥,并将IV保存在密钥文件中。 将密钥和IV保存在密钥文件中。 请注意,这是由不同客户使用的相同应用程序。 看起来,三种select都会达到同样的目标。 不过,我想就正确的方法应该得到您的反馈。
我想知道AESencryption后的数据大小,这样我就可以避免为了知道大小而caching我的后AES数据(在磁盘或内存上)。 我使用128位AES和javax.crypto.Cipher和javax.crypto.CipherInputStream进行encryption。 用各种input大小进行的一些testing表明,按照下面计算的后encryption大小是正确的: long size = input_Size_In_Bytes; long post_AES_Size = size + (16 – (size % 16)); 但我不确定上述公式是否适用于所有可能的input大小。 是否有一种方法可以在应用AESencryption之后计算数据的大小 – 事先不必缓冲encryption数据(在磁盘或内存上)以了解其后encryption大小?
SHA和AESencryption有什么区别?
如果我要AESencryption一个文件,然后ZLIB压缩它,那压缩的效率会比我先压缩然后encryption的效率低吗? 换句话说,我应该先压缩还是先encryption,还是重要?
我想用我自己的密钥使用AESencryption一个string。 但是我在密钥的位长方面遇到了麻烦。 你可以检查我的代码,看看我需要修复/更改。 public static void main(String[] args) throws Exception { String username = "bob@google.org"; String password = "Password1"; String secretID = "BlahBlahBlah"; String SALT2 = "deliciously salty"; // Get the Key byte[] key = (SALT2 + username + password).getBytes(); System.out.println((SALT2 + username + password).getBytes().length); // Need to pad key for AES // TODO: Best […]
我正在寻找一些如何使用node.js和mongodb安全地存储密码和其他敏感数据的例子。 我希望一切都使用一个独特的盐,我将存储在mongo文件中的哈希旁边。 对于身份validation,我只需要salt和encryptioninput,并将其匹配到存储的散列? 我是否需要解密这些数据?如果有,我该怎么做? 私人密钥,甚至腌制方法如何安全地存储在服务器上? 我听说AES和Blowfish都是很好的select,我应该用什么? 如何devise这个例子将是非常有帮助的! 谢谢!
下面的例子有什么问题? 问题是解密string的第一部分是无稽之谈。 但是,其余的很好,我得到… Result: `£eB6O geS i are you? Have a nice day. @Test public void testEncrypt() { try { String s = "Hello there. How are you? Have a nice day."; // Generate key KeyGenerator kgen = KeyGenerator.getInstance("AES"); kgen.init(128); SecretKey aesKey = kgen.generateKey(); // Encrypt cipher Cipher encryptCipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); encryptCipher.init(Cipher.ENCRYPT_MODE, aesKey); // Encrypt […]
为什么我问这个问题: 我知道关于AESencryption的问题很多,即使是Android也是如此。 如果您searchnetworking,则会有很多代码片段。 但是在每一个页面上,在每个堆栈溢出的问题中,我发现另一个有重大差异的实现。 所以我创造了这个问题来find一个“最佳实践”。 我希望我们可以收集最重要的要求清单,并build立一个真正安全的实施! 我读了初始化载体和盐。 并不是我发现的所有实现都有这些function。 那么你需要它吗? 它增加了很多安全吗? 你如何实现它? 如果encryption的数据不能被解密,algorithm是否应该引发exception? 或者是不安全的,它应该只是返回一个不可读的string? algorithm可以使用Bcrypt而不是SHA? 那么我发现这两个实现呢? 他们好吗? 完美或缺less一些重要的东西? 这些是安全的? 该algorithm应该采取一个string和一个“密码”encryption,然后用该密码encryptionstring。 输出应该是一个string(hex或base64?)了。 当然,解密也是可能的。 Android的完美AES实现是什么? 实施#1: import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.SecretKeySpec; public class AdvancedCrypto implements ICrypto { public static final String PROVIDER = […]
我想encryption一个二进制文件。 我的目标是防止任何人读取没有密码的文件。 哪个更好的解决scheme,AES或Blowfish具有相同的密钥长度? 我们可以假设攻击者有很多资源(软件,知识,金钱)来破解文件。