jjzjj

Cryptography

全部标签

java - 如何在代码中安全地存储私钥

这个问题在这里已经有了答案:HowdoIsecurelystoreencryptionkeysinjava?[closed](4个答案)关闭7年前。我正在从事一个软件项目,应用程序最终将在不受信任的环境中运行。我需要执行一些辅助加密签名(这意味着这不是保护数据的主要方式),但不希望将key留在普通View中:privatestaticfinalStringprivateKey="00AABBCC....0123456789";我可以使用什么方法来合理地保护它?我知道没有什么是完整的证据,但这会在安全墙中增加一个额外的层。澄清一下:我得到了本质上是一个字符串的东西,我不希望在调试器中或通

java - 每次加密使用随机盐时,我可以避免每次加密/解密调用的密码重新初始化吗?

编辑实际上重新初始化密码并没有那么慢。由于迭代计数,创建key本身很慢。此外,迭代计数被忽略并且从未在加密本身中使用,仅在key生成中使用。根据所选算法,JCEapi有点误导原帖由于Java中的密码学非常......密码学,我正在努力进行一些优化。在功能方面,这个类工作得很好,我希望它能作为AES加密使用的例子我在使用BouncyCaSTLe的AES实现加密和解密数据时遇到性能问题(我没有比较,那是我测试的唯一一个实现)。实际上这个问题对于我决定使用的任何密码都是通用的。主要问题是:我可以避免每次加密/解密调用时将两个密码全部重新初始化吗?它们太贵了为简单起见,请记住以下代码已删除其异

java - Initial Vector的CTR模式使用(四)

据我所知,CTR模式不使用初始vector。它只需要一个计数器,用给定的key对其进行加密,然后将结果与明文进行异或以获得密文。其他分组密码模式(如CBC)在进行加密之前会使用初始vector对明文进行XOR。所以这是我的问题。我在Java中有以下代码(使用bouncycaSTLe库):Ciphercipher=Cipher.getInstance("AES/CTR/PKCS5Padding","BC");cipher.init(Cipher.ENCRYPT_MODE,key);byte[]result=cipher.doFinal("Someplaintext");使用相同的键对上述

java - 使用 AES/CTR 模拟流密码

我正在编写一个应用程序服务器,我决定使用AES128/CTR/NoPadding来保护连接,因为它被认为足够安全而不必将字节扩展到block边界,我认为它非常适合到逻辑上是无缝流的TCP。问题是Cipher.update()在它有一个完整的16字节block之前不会返回加密block,因为CTR基本上是基于block密码虽然模拟流密码。我应该从tcp套接字读取数据并在消息到达时立即处理消息,但我无法检索最新的block,因为它仍在构建并且其大小小于16字节。我等不及了,因为我们不知道下一条消息何时发送。当然,我可以调用Cipher.doFinal()来获取剩余部分,但这意味着流(连接)

java - 如何在 Java 中使用 AES 加密数据

我想在java中使用AES(cbc)加密一段数据,我想使用我自己的IV,它保存在一个字节数组中,我自己的key保存在一个字节数组中。我该怎么做?我正在搜索它以查找有关该主题的教程。 最佳答案 This可能是我找到的关于该主题的最佳指南。它以简单的方式解释了基础知识,一次一个概念。 关于java-如何在Java中使用AES加密数据,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/51

1 个 block (16 字节)的 Java AES-128 加密返回 2 个 block (32 字节)作为输出

我使用以下代码进行AES-128加密来编码一个16字节的block,但编码值的长度给出了2个32字节的block。我错过了什么吗?plainEnc=AES.encrypt("thisisapassword!");importjava.security.*;importjava.security.spec.InvalidKeySpecException;importjavax.crypto.*;importsun.misc.*;publicclassAES{privatestaticfinalStringALGO="AES";privatestaticfinalbyte[]keyValu

java - 重复使用 Java 的 SecureRandom

我对SecureRandom的用法有点困惑。我需要在循环中生成nsecure随机数。为每一代使用相同的SecureRandom实例是否安全?以下解决方案在加密强度方面是否存在差异?1)没有种子的单实例SecureRandomsr=newSecureRandom();for(inti=0;i2)每一代的新实例for(inti=0;i3)带种子的单实例SecureRandomsr=newSecureRandom()for(inti=0;i 最佳答案 也许与直觉相反,第三个几乎肯定是最弱的,在循环迭代中重新播种是一个糟糕的主意。第二个是坏

java - 如何在 Java 中解密 sha1 加密的字符串

是否有可能解密一些先前在Java中使用SHA-1算法加密的字符串? 最佳答案 SHA1是一个cryptographichashfunction,关键是你无法撤消它。如果可以反转散列(找到给定散列的输入),它就没有用了。如果你需要加密一些东西然后解密,你应该使用encryptionfunction喜欢AES或RSA.但是,对于非常简单的输入,可能会crackthehashfunction通过猜测输入是什么并检查散列是否相同。示例Python代码:defcrack_hash(hash_to_crack,hash_function,lis

Java 7 的 Java SE 强加密?

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭6年前。ImprovethisquestionJava7的预览版似乎缺少用于无限加密强度的JCE包。有人偶然发现了这样的东西吗?

java - MessageDigest 的 update 方法有什么作用?BASE64Encoder 的作用是什么?

以下是加密用户字符串的代码:importjava.io.UnsupportedEncodingException;importjava.security.MessageDigest;importjava.security.NoSuchAlgorithmException;importsun.misc.BASE64Encoder;importjava.io.*;classEncrypter{publicsynchronizedStringencrypt(StringplainText)throwsException{MessageDigestmd=null;try{md=MessageD