如您所知,当我们要使用JavaCards进行密码学操作时,我们必须使用Cipher对象。我的问题实际上与效率有关。假设我想使用AESkey执行一些加密和解密操作。以下哪种策略更好?定义两个不同的Cipher对象并用一个key初始化它们,但模式不同(MODE_ENCRYPT和MODE_DECRYPT)。然后对于每个操作,我只需要在适当的对象上调用doFinal()方法。定义单个Cipher对象,每次调用doFinal()方法之前,使用适当的方法对该对象执行init()方法调用模式。 最佳答案 首先,根据Cipher.doFinal(.
我一直在尝试使用Java加密PDF。到目前为止,我可以成功加密其他文件类型(.txt、.png等)。当我使用PDF进行解密时,它会破坏in中的信息。这是我用来加密它的:publicbyte[]cryptograph(Keykey,byte[]content){Ciphercipher;byte[]cryptograph=null;try{cipher=Cipher.getInstance("AES/ECB/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE,key);cryptograph=cipher.doFinal(content);}ca
我正在使用以下代码和类从AES_CMAC生成多样化key。doFinal方法每次返回不同的key,因为输入和masterKey是常量。publicbyte[]calculateDiverseKey(byte[]input)throwsInvalidKeyException,NoSuchAlgorithmException{AesCmacmac=null;mac=newAesCmac();SecretKeykey=newSecretKeySpec(masterKey,"AES");mac.init(key);//setmasterkeymac.updateBlock(input);//g
我想开发一个小型的OpenPGP客户端,我正在寻找OpenPGP的Java库。是否有针对此方法的任何(开源)建议?Cryptix.org好像没有生命了…… 最佳答案 我找到了BouncyCastle库,用于Java和C#。我没有任何经验。我会尝试并在此处报告。它提供:适用于Java和C#的轻量级加密API。Java密码术扩展和Java密码术架构的提供者。JCE1.2.1的洁净室实现。用于读取和写入编码的ASN.1对象的库。轻量级客户端TLSAPI。第1版和第3版X.509证书、第2版CRL和PKCS12文件的生成器。版本2X.509
嘿,我正在使用公式[x->(x+shift-1)mod127+1]在Java中制作一个简单的凯撒密码我想让我的加密文本具有除控制字符之外的ASCII字符(即从32-127)。如何避免在加密文本中应用0-31的控制字符。谢谢。 最佳答案 这样的事情怎么样:publicStringapplyCaesar(Stringtext,intshift){char[]chars=text.toCharArray();for(inti=0;i=32&&c诚然,这将127视为非控制字符,但事实并非如此……您可能希望调整它以将范围保持为[32,126]
我正在用java为与ikev2协议(protocol)相关的程序编写测试工具。作为其中的一部分,我需要能够计算ECDSA签名(特别是使用NISTP-256曲线)。RFC4754描述了IKEv2中ECDSA的使用,并提供了一组测试vector(包括我需要的p256曲线)。我正在尝试使用以下代码通过java的ECDSA签名实现来运行ECDSA-256测试vector值(RFC中的Section8.1)://"abc"fortheinputbyte[]input={0x61,0x62,0x63};//UglywayofgettingtheECParameterSpecfortheP-256c
函数nextXXX()之间有什么区别-例如nextInt()、nextFloat()和nextBytes()-和generateSeed(intnumBytes):byte[]在SecureRandomclassJava的?generateSeed中的“种子生成算法”与安全随机生成器本身有何不同? 最佳答案 generateSeed()不使用随机数生成器生成的任何字节。相反,它只是传递给SecureRandom实现用来为自己播种的熵源,如果它正在为自己播种。例如,在Oracle提供的JavaSE上调用以下代码://initSeedi
出于某些原因,我需要使用256位block大小而不是使用128位block大小的AES实现Rijndael解压(原因:数据在PHP中使用Rijndael加密...)。如何更改密码的block大小?如果我只是用"RIJNDAEL/CFB/PKCS5Padding"获得密码并尝试用256位初始化IV,我会得到一个异常,因为block大小只有128位。 最佳答案 除了具有128位block大小的Rijndael之外,任何SunJCE供应商都不支持任何算法:这是AES算法。要获得具有256位block大小的rijndael,您将不得不去其他
我正在制作一个简单的程序,它接受在一个文本框中输入的文本,并接受另一个文本框中的密码,然后对其进行某种简单的加密并将其保存到一个文件中。之后,用户应该能够再次打开该文件并提供用于加密它的密码,它应该会吐出原始文本。现在我正在拿绳子。把它分成一个字符数组,然后对密码做同样的事情。之后,我获取密码,将所有这些字符转换为整数,找到所有这些的平均值,并将其用作原始文本中字符的偏移量。有点像:textChars[1]=(char)((int)textChars[1]+offset);然后我可以对加密字符串做相反的操作:encryptedChars[1]=(char)((int)encrypted
我正在尝试使用java.security和javax.crypto在java中加密一些整数。问题似乎是Cipher类只加密字节数组。我不能直接将整数转换为字节字符串(我可以吗?)。执行此操作的最佳方法是什么?我是否应该将整数转换为字符串并将字符串转换为byte[]?这看起来效率太低了。有谁知道快速/简单或有效的方法吗?请告诉我。提前致谢。jbu 最佳答案 您可以使用DataOutputStream将int转换为byte[],如下所示:ByteArrayOutputStreambaos=newByteArrayOutputStream