Tag: 加密

在Android密钥库中存储hmac密钥

我使用下面的代码来创建一个hmac键并将其作为字符串返回。 KeyGenerator keyGen = null; try { keyGen = KeyGenerator.getInstance(“HmacSHA256”); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } SecretKey key = keyGen.generateKey(); byte[] encoded = key.getEncoded(); String s=Base64.encodeToString(encoded, Base64.DEFAULT); Log.i(“Hmac key before encrypt”,s); try { KeyStore keystore = KeyStore.getInstance(“AndroidKeyStore”); keystore.load(null, null); KeyStore.PrivateKeyEntry privateKeyEntry = (KeyStore.PrivateKeyEntry) keystore.getEntry(“temp”, null); RSAPublicKey publicKey = (RSAPublicKey) privateKeyEntry.getCertificate().getPublicKey(); Cipher cipher = Cipher.getInstance(“RSA/ECB/PKCS1Padding”); […]

无法使用Cipher类解密文件

我想基于密码加密文件,所以我使用了以下代码: private void encrypt(String password) { SecretKeyFactory f = SecretKeyFactory.getInstance(“PBKDF2WithHmacSHA1”); KeySpec ks = new PBEKeySpec( password.toCharArray(), “salt”.getBytes(), 1024, 256 ); SecretKey s = f.generateSecret(ks); java.security.Key key = new SecretKeySpec(s.getEncoded(), “AES/CBC/PKCS5Padding”); InputStream input = new FileInputStream(“PATH_TO_IMAGE”); BufferedInputStream bis = new BufferedInputStream(input); FileOutputStream fos = new FileOutputStream(“PATH_TO_ENCRYPTED_FILE”); BufferedOutputStream bos = new BufferedOutputStream(fos); Cipher cipher = Cipher.getInstance(“AES/CBC/PKCS5Padding”); cipher.init(Cipher.ENCRYPT_MODE, […]

如果解码,两个不同的BASE 64编码字符串可以产生相同的字符串吗?

在客户端,我正在对字符串进行MD5加密,然后对生成的哈希进行BASE 64编码。 然后将该最终编码的字符串用于服务器端的比较。 我能够成功地为许多测试用例做到这一点,但是对于下面的测试用例,它失败了。 MD5的字符串 2679:07071960:09348448:3:08912206:3:EXPRESS:1:EU4NW31E7INEC1X 我的MD5哈希字符串: 291423A531148527A9524EA0924CDF68 我的Base64编码字符串: KRQjpTEUhSepUk6gkkzfaA== 当我尝试在http://www.opinionatedgeek.com/dotnet/tools/base64encode/上放置用于BASE64编码的MD5哈希字符串时,它会生成以下字符串: MjkxNDIzQTUzMTE0ODUyN0E5NTI0RUEwOTI0Q0RGNjg= 但是,当我尝试解码我​​的Base64字符串时,就是“KRQjpTEUhSepUk6gkkzfaA ==”,这里http://www.opinionatedgeek.com/dotnet/tools/Base64Decode/Default.aspx我得到了我的哈希码(打开了.bin)文件在hex编辑器中生成)。 那么,单个字符串可能有多个Base64编码值吗? 我使用以下代码生成编码字符串: public static String getHashCode(String text) { MessageDigest md; byte[] md5hash = new byte[32]; try{ md = MessageDigest.getInstance(“MD5”); md.update(text.getBytes(“iso-8859-1”), 0, text.length()); md5hash = md.digest(); } catch(Exception e) { return “-1”; } String encoded = Base64.encode(md5hash); String retValue = new String(encoded); […]

java.security.NoSuchAlgorithmException:RSA签名不可用

这是例外 线程“main”中的exceptionjava.security.NoSuchAlgorithmException:RSA签名不可用 在java.security.Signature.getInstance(Signature.java:229) 在MailClient.main(MailClient.java:52) 这是我的代码 import java.io.*; import java.net.*; import java.nio.ByteBuffer; import java.util.*; import java.security.*; public class MailClient { public String getMessage(Mail m){ return m.message; } public static void main(String[] args) throws Exception { // Initialisation BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String host = args[0]; int port = Integer.parseInt(args[1]); String userid = args[2]; while(true) […]

如何在数据库中存储加密的密码?

我试图在JSP和Servlets的帮助下以加密的forms将密码存储到数据库中。 我怎么能这样做?

无法更改密钥库格式

我正在尝试使用最新JRE(版本1.8.0_151)中的keytool创建一些密钥库。 当我使用此命令创建密钥库时keytool -genkey -alias serverprivate -keystore server.private -keyalg rsa -storepass apassword -keypass apassword它向我显示以下警告: Warning: The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using “keytool -importkeystore -srckeystore server.private -destkeystore server.private -deststoretype pkcs12”. 所以我输入命令,它说完了,旧的密钥库保存在server.private_old中。 但是当我运行keytool -list -keystore server.private并输入密码时,它仍然被列为JKS而不是PKCS12。 为什么是这样? 更新 它也没有默默地改为pkcs12,因为当我使用KeyStore store = KeyStore.getInstance(“pkcs12”); 在java中它会抛出一个错误,而它在使用getInstance(“JKS”);时工作正常getInstance(“JKS”); […]

PKCS#1 V2.0是否针对Java实现?

我需要使用PKCS#1 V2.0加密方法(在PKCS#1V2规范的第 7.2.1节中定义)加密数据。 它已经为Java实现了吗? 我正在考虑将一个参数传递给javax.crypto.Cipher指定“PKCS#1V2”,我想知道是否有这样的东西?

InvalidKeyException java.security.InvalidKeyException:没有安装的提供程序支持此键:(null)

我有两个类,一个是主类,另一个是AES的实现。 但是,在我的AES类中,我有一个解密字符串的方法,但每当我运行它时,它都会产生exception 我的加密方法工作正常但我的解密方法不能按预期工作。 代码 private Cipher aesCipherForDecryption; String strDecryptedText = new String(); public String decryptAES(final String ciphertext) { try { aesCipherForDecryption = Cipher.getInstance(“AES/CBC/PKCS5PADDING”); aesCipherForDecryption.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(iV)); byte[] byteDecryptedText = aesCipherForDecryption.doFinal(byteCipherText); strDecryptedText = new String(byteDecryptedText); } catch (IllegalBlockSizeException e) { System.out.print(“IllegalBlockSizeException ” +e); } catch (BadPaddingException e) { System.out.print(“BadPaddingException “+e); } catch (NoSuchAlgorithmException e) { […]

在Java中使用mcrypt(在PHP中)的任何等价物?

任何人都可以告诉任何可以在java中使用的库,如果使用mcrypt库在PHP中完成操作,则可以得到相同的结果。 我想实际使用AES加密Java中的字符串,并在PHP中解密它。 Java Cipher是否会在PHP中通过mcrypt产生加密解密? 编辑: 在Web中找到了一些resin-3.1库。 是真的吗?

为php和java实现的加密方法?

我必须将一些字符串从java servlet传递给php脚本。 加密字符串有哪些选项? 我需要一个为java和php实现的方法(比如…… caesar cipher ……)。 有没有标准的加密方法我应该能够获得java和php的库? 我想加密java端的字符串,传递给php脚本,然后让php脚本解密它们。 由于我正在使用的提供商的限制,我无法使用https。 谢谢