我试图安全地存储在数据库中的密码,并为此我select存储使用PBKDF2函数生成的散列。 我想使用弹性城堡库来做到这一点,但我不知道为什么我不能通过使用JCE接口使它工作…问题是生成3种不同的模式: 1.使用sun提供的PBKDF2WithHmacSHA1密钥工厂 2.直接使用充气城堡api 3.通过JCE使用充气城堡 结果有两个不同的值:前两个共同,第三个共同。 这是我的代码: //Mode 1 SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); KeySpec keyspec = new PBEKeySpec("password".toCharArray(), salt, 1000, 128); Key key = factory.generateSecret(keyspec); System.out.println(key.getClass().getName()); System.out.println(Arrays.toString(key.getEncoded())); //Mode 2 PBEParametersGenerator generator = new PKCS5S2ParametersGenerator(); generator.init(PBEParametersGenerator.PKCS5PasswordToUTF8Bytes(("password").toCharArray()), salt, 1000); KeyParameter params = (KeyParameter)generator.generateDerivedParameters(128); System.out.println(Arrays.toString(params.getKey())); //Mode 3 SecretKeyFactory factorybc = SecretKeyFactory.getInstance("PBEWITHHMACSHA1", "BC"); KeySpec keyspecbc = new PBEKeySpec("password".toCharArray(), salt, […]
显然Spongy城堡是使用完整版的Bouncy城堡的Android替代品。 然而,在导入jar时,我得到各种“无法解决”的错误,因为它依赖于未包含在Android中的包,主要是javax.mail,javax.activation和javax.awt.datatransfer。 那么围绕这个最好的方法是什么? 对这个问题的回应, 这表明这些软件包不应该被使用, 这个受欢迎的问题甚至没有考虑find一种方法来获取AWT。 那么Spongy Castle是如何依靠它们的呢? 人们正在使用海绵城堡 ,对吧?
通过环顾这里以及一般的互联网,我find了Bouncy Castle 。 我想使用Bouncy Castle(或其他一些免费的实用程序)来生成Java中string的SHA-256哈希表。 看着他们的文档,我似乎无法find我想要做的任何好例子。 这里有人能帮我吗?
首先,我已经看到Android 4.2打破了我的AESencryption/解密代码和encryption错误在Android 4.2和提供的解决scheme: SecureRandom sr = null; if (android.os.Build.VERSION.SDK_INT >= JELLY_BEAN_4_2) { sr = SecureRandom.getInstance("SHA1PRNG", "Crypto"); } else { sr = SecureRandom.getInstance("SHA1PRNG"); } 对我不起作用,因为在解码Android 4.2中的Android 4.2中encryption的数据时,我得到: javax.crypto.BadPaddingException: pad block corrupted at com.android.org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher.engineDoFinal(BaseBlockCipher.java:709) 我的代码很简单,直到Android 4.2: public static byte[] encrypt(byte[] data, String seed) throws Exception { KeyGenerator keygen = KeyGenerator.getInstance("AES"); SecureRandom secrand = SecureRandom.getInstance("SHA1PRNG"); secrand.setSeed(seed.getBytes()); keygen.init(128, secrand); […]
我的应用程序将获取一组文件并签名。 (我不想签署一个程序集。)有一个.p12文件,我从中获取私钥。 这是我试图使用的代码,但我得到一个System.Security.Cryptography.CryptographicException "Invalid algorithm specified." 。 X509Certificate pXCert = new X509Certificate2(@"keyStore.p12", "password"); RSACryptoServiceProvider csp = (RSACryptoServiceProvider)pXCert.PrivateKey; string id = CryptoConfig.MapNameToOID("SHA256"); return csp.SignData(File.ReadAllBytes(filePath), id); 根据这个答案它不能做( RSACryptoServiceProvider不支持SHA-256),但我希望可能使用不同的库,如Bouncy城堡。 我是新来的这个东西,我发现Bouncy Castle很混乱。 我将一个Java应用程序移植到C#,并且我必须使用相同types的encryption来签署这些文件,所以我被卡在RSA + SHA256中。 我如何使用Bouncy Castle,OpenSSL.NET,Security.Cryptography或其他第三方库,我还没有听说过? 我假设,如果可以在Java中完成,那么它可以在C#中完成。 更新: 这是我从poupou的anwser链接中得到的 X509Certificate2 cert = new X509Certificate2(KeyStoreFile, password"); RSACryptoServiceProvider rsacsp = (RSACryptoServiceProvider)cert.PrivateKey; CspParameters cspParam = new CspParameters(); cspParam.KeyContainerName = rsacsp.CspKeyContainerInfo.KeyContainerName; cspParam.KeyNumber […]