小编Pin*_*ain的帖子

使用Java中的PBKDF2进行密码验证

我正在用Java做基于密码的文件加密; 我使用AES作为底层加密算法,PBKDF2WithHmacSHA1并使用以下代码从盐和密码组合中获取密钥(我从本网站上的另一张慷慨的海报中获得).

SecretKeyFactory f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec ks = new PBEKeySpec(password,salt,1024,128);
SecretKey s = f.generateSecret(ks);
Key k = new SecretKeySpec(s.getEncoded(),"AES");
Run Code Online (Sandbox Code Playgroud)

我共享盐,用户在每端输入密码,加密和解密工作正常:-)我的问题是,我希望能够验证用户输入的密码是否正确才能开始(可能很长)解密过程.我知道PBKD规范包含一个可选的2字节验证值,但我不知道如何使用上述方法生成此值.Java是否为此提供支持,或者不支持哪种安全替代方案?

谢谢你的时间.

java passwords cryptography aes

18
推荐指数
2
解决办法
2万
查看次数

修改执行Jar文件

Hello Stack Overflow朋友.我有一个简单的问题,我担心没有一个简单的解决方案,我需要建议如何继续.我正在开发一个打包为可执行JAR的Java应用程序,但它需要在执行期间修改其一些JAR文件内容.在这个阶段我遇到了一个问题,因为一些操作系统锁定文件阻止写入它.

在应用程序退出时,用户必须看到jar文件的更新版本,尽管我可以非常灵活地了解如何实现这一点.清洁高效的解决方案显然是优先考虑的,但便携性是唯一的硬性要求.

以下是我可以看到解决问题的三种方法,可以随意评论或建议其他方法.

  1. 告诉Java解锁JAR文件进行写入(这似乎不太可能,但它将是最简单的解决方案)
  2. 在应用程序启动时将可执行类文件复制到临时文件,使用类加载器加载这些文件并从初始JAR文件中卸载这些文件.(对类加载器没有太多经验,但希望JVM能够足够聪明地实现原来的JAR不再使用,所以解锁它)
  3. 将第二个可执行JAR文件放入First中,在启动时将内部jar提取到e临时文件,使用复制的内部JAR调用新的java进程并将其传递给外部JAR的位置,第一个进程退出,第二个进程修改外部jar uninumbered.(这将工作,但我不确定有一个平台独立的方式一个java应用程序调用另一个)

我知道这是一个奇怪的问题,但任何帮助将不胜感激.

java file-io jar executable-jar classloader

8
推荐指数
1
解决办法
3246
查看次数

根据RFC测试向量计算Java中的ECDSA签名

我正在java中编写一个测试工具,用于与ikev2协议相关的程序.作为其中的一部分,我需要能够计算ECDSA签名(特别是使用NIST P-256曲线).

RFC 4754描述了在IKEv2中使用ECDSA并有助于提供一组测试向量(包括我需要的p256曲线).

我正在尝试使用以下代码通过java的ECDSA签名实现运行ECDSA-256测试向量值(RFC中的第8.1节):

//"abc" for the input
byte[] input = { 0x61, 0x62, 0x63 };

//Ugly way of getting the ECParameterSpec for the P-256 curve by name as opposed to specifying all the parameters manually.
KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC");
ECGenParameterSpec kpgparams = new ECGenParameterSpec("secp256r1");
kpg.initialize(kpgparams);
ECParameterSpec params = ((ECPublicKey) kpg.generateKeyPair().getPublic()).getParams();

//Create the static private key W from the Test Vector
ECPrivateKeySpec static_privates = new ECPrivateKeySpec(new BigInteger("DC51D3866A15BACDE33D96F992FCA99DA7E6EF0934E7097559C27F1614C88A7F", 16), params);
KeyFactory kf = KeyFactory.getInstance("EC");
ECPrivateKey spriv = …
Run Code Online (Sandbox Code Playgroud)

java cryptography elliptic-curve ecdsa

6
推荐指数
1
解决办法
7770
查看次数

如何做Diffie Hellman密钥生成并在Java中检索原始密钥字节

我正在java中为现有程序编写测试工具.作为其中的一部分,我需要生成一个Diffie Hellman密钥对,并以其原始(即未编码的字节)形式将公钥传递给另一个程序.

我可以使用以下代码成功使用密钥对:

KeyPairGenerator kpg = KeyPairGenerator.getInstance("DiffieHellman");
kpg.initialize(512);
KeyPair dkp = kpg.generateKeyPair();
Run Code Online (Sandbox Code Playgroud)

但是,我似乎无法检索键的原始字节值:-(调用dkp.getPublic().getEncoded()返回一个字节数组,但它的键是x509编码格式.

我有三种可能的前进方式:

  1. 找到一些以原始形式从上面获取关键数据的方法.
  2. 将密钥的x509编码解码为其原始格式
  3. 以允许访问原始密钥的不同方式生成密钥

但我不知道如何去做任何一个(哪个会变得最好)?

任何帮助或建议将不胜感激!

java cryptography public-key-encryption diffie-hellman

5
推荐指数
1
解决办法
2239
查看次数