Articles of bouncycastle

Android上的数据encryption,AES-GCM或纯AES?

我的团队需要开发一个解决scheme,以用Java编写的Android应用程序的上下文来encryption二进制数据(存储为byte[] )。 encryption的数据将以各种方式传输和存储,在此期间不能排除数据损坏。 最终另一个Android应用程序(再次用Java编写)将不得不解密数据。 已经确定encryptionalgorithm必须是AES,具有256位的密钥。 不过,我想就我们应该使用哪种AES实现和/或“模式”做出明智的决定。 我已经读过一些叫GCM模式的东西,我们用它做了一些testing(使用BouncyCastle / SpongyCastle),但是我不完全清楚AES-GCM究竟是干什么用的,以及它与平原相比“买”了什么AES – 是否有任何权衡要考虑。 以下是我们所关心的/要求/问题的列表: 填充(Padding):我们需要encryption的数据并不总是128位的倍数,所以AES实现/模式应该添加填充,但只有在必要时。 我的印象是一个简单的AES实现,比如javax.crypto.Cipher提供的,不会那么做,但是最初的testing表明它的确如此。 所以我猜测填充要求本身没有理由诉诸像GCM而不是“普通”的AES。 那是对的吗? 身份validation:我们需要一种万无一失的方法来检测是否发生数据损坏。 但是,理想情况下,我们也希望检测何时使用不正确的密钥尝试解密。 因此,我们希望能够区分这两种情况。 我之所以最终考虑GCM的原因是由于这个Stackoverflow问题 ,其中一个响应者似乎暗示使用AES-GCM进行这种区分是可能的,尽pipe他没有提供详细的解释(更不用说代码) 。 尽量减less开销:我们需要限制存储和传输encryption数据的开销。 因此,我们希望知道特定的AES实现/模式的select是否以及在多大程度上影响了开销的大小。 encryption/解密性能:虽然这不是主要问题,但是我们想知道,在CPU时间和内存占用情况方面,特定AES实施/模式的select在多大程度上影响encryption和解密性能。 提前感谢您提供任何build议,澄清和/或代码示例。 编辑: delnan有用地指出,没有“平原AES”这样的事情。 为了澄清,我的意思是使用Java内置的AES支持。 像这样: Cipher localCipher = Cipher.getInstance("AES");

在bouncycastle中是否支持RSA PKCS1-OAEP填充?

我正在Java / Android中实现encryption代码以匹配iOSencryption。 在iOS中,使用以下填充scheme使用RSA进行encryption:PKCS1-OAEP 但是,当我尝试使用PKCS1-OAEP创build密码时。 Cipher c = Cipher.getInstance("RSA/None/PKCS1-OAEP", "BC"); 以下是堆栈跟踪 javax.crypto.NoSuchPaddingException: PKCS1-OAEP unavailable with RSA. at com.android.org.bouncycastle.jcajce.provider.asymmetric.rsa.CipherSpi.engineSetPadding(CipherSpi.java:240) at javax.crypto.Cipher.getCipher(Cipher.java:324) at javax.crypto.Cipher.getInstance(Cipher.java:237) 也许这个RSA/None/PKCS1-OAEP不正确? 但是找不到任何明确的答案来说明PKCS1-OAEP不被支持或者定义它的正确方法。 我正在使用海绵城堡库,所以有充分的bouncycastle实现。

Android弹性城堡:IOException

我使用Sun的keytool来创build一个Bouncy城​​堡密钥库并将证书导入到其中。 keytool确实在Bouncy城​​堡格式中生成了一个密钥库。 然后,我尝试将Bouncy城​​堡密钥库导入到Android程序中。 我能够得到“BKS”密钥库的一个实例,但在密钥库上调用加载 "java.io.IOException: Wrong version of key store". 这是代码 KeyStore keyStore = KeyStore.getInstance("BKS"); InputStream is = new FileInputStream("/mnt/sdcard/ArcGIS/mystore.bks"); keyStore.load(is, "abcdef".toCharArray()); 我尝试了从http://www.bouncycastle.org/latest_releases.html下载的Bouncy城​​堡JAR的各种版本 我究竟做错了什么? 谢谢,Ranjit

使用Bouncy Castle从android提取证书信息

我正在尝试使用充气城堡来读取Android apk文件中的CERT.RSA的内容。 通过使用: openssl pkcs7 -inform DER -in CERT.RSA -noout -print_certs -text 我得到以下,这似乎是正确的: Certificate: Data: Version: 3 (0x2) Serial Number: 93:6e:ac:be:07:f2:01:df Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, ST=California, L=Mountain View, O=Android, OU=Android, CN=Android/emailAddress=android@android.com Validity Not Before: Feb 29 01:33:46 2008 GMT Not After : Jul 17 01:33:46 2035 GMT Subject: C=US, ST=California, L=Mountain View, O=Android, OU=Android, […]

Android 4.2打破了我的encryption/解密代码,提供的解决scheme无法正常工作

首先,我已经看到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); […]

Android RSA密钥对生成 – 我应该使用标准的Java / Bouncy城​​堡/ Spongy城堡/ JSch /其他?

我一直在寻找大约一个星期+实施一个我想到的方法。 我碰到过很多关于所有这些不同方法的文章,但是我仍然感到困惑,所以我希望也许有人能够传播他们关于这些主题的知识,这样我就可以更容易地创build我所追求的方法,在Android中实现它。 我的“追捧”方法: 必须生成RSA公钥和私钥 公共必须有PKCS#1填充 必须是RSA 2048 返回字节数组中的公钥 显然你可以通过四种方式去做: 标准的Java 充气城堡 Spongy Castle (Android的友善?) JSch 由于我对安全性和整体Java非常陌生,所以我想知道是否有人能够最终给出一个清晰的解释。 下面是我试图用4种不同的编程方法实现我所追求的方法(上面提到的)的方法。 如果我不知道这是因为我不能通过相应的文件。 请随时纠正我。 1.标准Java(不知道是否PKCS#1): public byte[] returnPublicKeyInBytes() throws NoSuchAlgorithmException { KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); kpg.initialize(2048); KeyPair keyPair = kpg.genKeyPair(); byte[] pri = keyPair.getPrivate().getEncoded(); byte[] pub = keyPair.getPublic().getEncoded(); return pub; } 2.充气城堡(还没有function= /想法?): public byte[] returnPublicKeyInBytes() throws NoSuchAlgorithmException { RSAKeyPairGenerator […]

android调用keystore版本错误

我想做一个https请求。 我使用bouncycastle来生成这样的密钥库: keytool -importcert -trustcacerts -alias ludevCA -file lu_dev_cert.crt -keypass mypass -keystore keystore.bks -storepass mypass -storetype BKS -providerclass org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath bcprov-jdk15on-146.jar 而keylist命令返回一个正确的值。 但是,当我这样做: KeyStore ks = KeyStore.getInstance("BKS"); InputStream in = getResources().openRawResource(R.raw.keystore); ks.load(in, "mypass".toCharArray()); 我有一个错误: wrong version of keystore 我试图使用几个版本的bouncycast,但结果是一样的。 我也试图定义keysize 1024,但没有任何改变。 有任何想法吗 ?

如何在Android中包含Spongy Castle JAR?

显然Spongy城堡是使用完整版的Bouncy城​​堡的Android替代品。 然而,在导入jar时,我得到各种“无法解决”的错误,因为它依赖于未包含在Android中的包,主要是javax.mail,javax.activation和javax.awt.datatransfer。 那么围绕这个最好的方法是什么? 对这个问题的回应, 这表明这些软件包不应该被使用, 这个受欢迎的问题甚至没有考虑find一种方法来获取AWT。 那么Spongy Castle是如何依靠它们的呢? 人们正在使用海绵城堡 ,对吧?