Articles of rsa

用较less的内存来encryption/解密大文件的最佳做法

我想开发一个Android应用程序,用RSA和一些对称encryptionalgorithm来encryption和解密大文件(〜500Mb)。 我怎样才能做到这一点? 只有几MB内存的设备上使用什么是最好的解决scheme? 问候鲍比

从APK中确定签名证书

我已经从Eclipse for Android创build了一个签名的APK。 我想知道哪个RSA证书types在像RSA-1024或RSA 2048那样签名的APK中使用。 我怎么知道从APK文件? 编辑标题从“在Eclipse中签名APK使用哪个RSA证书?如何知道RSA密钥大小(1024/2048)?”

从文件加载公钥数据

在我的应用程序中,我生成一个公钥/私钥对,并将其存储起来,以便以后在磁盘上使用。 加载和重新初始化私钥工作正常,但对于私钥我得到一个未知的KeySpectypes:java.security.spec.PKCS8EncodedKeySpec – 我不知道为什么。 这就是我创build和保存密钥的方法(代码有点简化,以便于阅读): KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); kpg.initialize(4096); KeyPair keyPair = kpg.generateKeyPair(); privKey =keyPair.getPrivate(); pubKey =keyPair.getPublic(); DataOutputStream out=new DataOutputStream(ctx.openFileOutput(PRIVKEY_FILE,Context.MODE_PRIVATE)); byte[] data=privKey.getEncoded(); out.write(data); out.close(); DataOutputStream out=new DataOutputStream(ctx.openFileOutput(PUBKEY_FILE,Context.MODE_PRIVATE)); byte[] data=pubKey.getEncoded(); out.write(data); out.close(); 下一次加载的私钥工作正常: DataInputStream in=new DataInputStream(ctx.openFileInput(PRIVKEY_FILE)); byte[] data=new byte[in.available()]; in.readFully(data); PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(data); KeyFactory kf = KeyFactory.getInstance("RSA"); privKey = kf.generatePrivate(keySpec); decryptCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); […]

带有RSA签名的SHA256会在各种Android设备上返回不同的输出

我正在开发一个Android应用程序,我需要使用Java Signature类进行数据validation。 在每个Android设备上,我都可以签署数据并validation其签名。 但是,由于有一定数量的数据需要签名,一个确定的模数,一个确定的私人指数和一个确定的公开指数,我的签名的输出是不同的,取决于设备。 我曾尝试过大量的设备,并且获得了Android 3.2和3.2.1的相同签名,但是Android 2.2.x设备的签名不同。 我从之前在java项目中使用带有RSA的KeyFactory生成的常量字段计算这些签名。 密钥大小是2048bit。 以下是我用来签名和validation的代码的引用。 public byte[] signData(byte[] data, PrivateKey privateKey) throws … { Signature signature = Signature.getInstance("SHA256withRSA"); signature.initSign(privateKey); signature.update(data); return signature.sign(); } public boolean verifyData(byte[] data, byte[] sigBytes, PublicKey publicKey) throws … { Signature signature = Signature.getInstance("SHA256withRSA"); signature.initVerify(publicKey); signature.update(data); return signature.verify(sigBytes); } 如果我没有错,使用SHA256和RSA的签名是确定性的。 那我该如何解释这种行为呢? 另一个有趣的问题是,我怎样才能使这项工作跨设备,即签名将是相同的,没有哪一个设备,我用? 先谢谢你,弗兰克!

如何创build一个无限有效的Android密钥库RSA密钥?

以下是Googlebuild议创buildAndroid密钥库的方法 : keytool -genkey -v -keystore my-release-key.keystore -alias alias_name \ -keyalg RSA -keysize 2048 -validity 10000 虽然10000天可能看起来像永恒,但27年可能会比你想象的更快,RSA可能还在使用中。 如果调整一个命令行参数现在有将来有0.01%的机会来节省我的市场份额,我愿意这样做。 问题:如何尽可能地延长这个有效期?

如何在Android中使用C#生成的RSA公钥?

我想确保Android应用程序和C#ASP.NET服务器之间的消息隐私,在HTTPS不能被假定为可用的情况下。 我想使用RSA来encryption从Android设备传输的对称密钥,当它首次联系服务器时。 RSA密钥对已在服务器上生成,并且私钥保存在服务器上。 密钥对是在C#中使用以下命令生成的: // Create a new instance of RSACryptoServiceProvider RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(2048); // Ensure that the key doesn't get persisted rsa.PersistKeyInCsp = false; RSAParameters parameters = rsa.ExportParameters(false); string modulus = Convert.ToBase64String(parameters.Modulus); string exponent = Convert.ToBase64String(parameters.Exponent); string xmlKeys = rsa.ToXmlString(true); 尝试通过硬编码embedded公钥(从Visual Studio复制到Eclipse)不起作用。 该代码将引发org.bouncycastle.crypto.DataLengthException:对rsaCipher.doFinal()方法调用中的RSA密码input过大。 // Generate a new AES key byte[] key = […]

在Android中使用base64编码的公钥对RSA进行encryption

如何使用base-64编码的公钥对字节数组进行RSAencryption? 在阅读了一些关于如何在Java中进行RSAencryption的文章(谷歌search)之后,find了下面的代码片断 public byte[] rsaEncrypt(byte[] data) { PublicKey pubKey = readKeyFromFile("/public.key"); Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE, pubKey); byte[] cipherData = cipher.doFinal(src); return cipherData; } 我有公钥作为base64编码的string(126个字符),我如何使用编码的string创build'PublicKey',并使用密码。

Android KeyStore私有指数无法提取

我想在Android密钥库中生成一个RSA密钥对。 由于Android 4.3应该可以在Android系统密钥库中生成RSA密钥。 我生成我的RSA密钥(工作正常) Calendar notBefore = Calendar.getInstance(); Calendar notAfter = Calendar.getInstance(); notAfter.add(1, Calendar.YEAR); KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(ctx) .setAlias("key") .setSubject( new X500Principal(String.format("CN=%s, OU=%s", "key", ctx.getPackageName()))) .setSerialNumber(BigInteger.ONE) .setStartDate(notBefore.getTime()) .setEndDate(notAfter.getTime()).build(); KeyPairGenerator kpg; kpg = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore"); kpg.initialize(spec); KeyPair kp = kpg.genKeyPair(); publicKey = kp.getPublic(); privateKey = kp.getPrivate(); 我的RSAencryption看起来像(也有效): public static byte[] RSAEncrypt(final byte[] plain) throws NoSuchAlgorithmException, […]

Android公钥encryption

我的Android应用程序实现RSAencryption,但后端无法解密应用程序生成的令牌。 这是代码,公共密钥的开始和结束行在拨打电话之前已被删除,可能是什么问题? String encryptedToken = Base64.encodeToString(encrypt(publicKey, "4111111111111111"), Base64.NO_WRAP); public static byte[] encrypt(String publicKey, String data) { if (TextUtils.isEmpty(publicKey) || TextUtils.isEmpty(data)) { return null; } try { // Decode the modified public key into a byte[] byte[] publicKeyByteArray = Base64.decode(publicKey.getBytes("UTF-8"),Base64.NO_WRAP); Cipher mCipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding"); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(publicKeyByteArray); Key key = […]

Android:使用存储在文件中的公钥解密RSA文本

我已经好几天试图没有成功。 在这里有很多类似的问题在StackOverflow中,甚至其中两个是完全一样的我的,但没有回答和尚未解决:1) 转换PHP RSA公钥为Android公钥 2) Android:如何解密一个opensslencryption文件与RSA密钥? 我的场景:我有一些使用RSAencryption的文本(不是由我encryption)。 我在我的res / raw文件夹中有一个“public.key”文件,其中需要解密公钥(与用于encryption邮件的私钥相关的公钥),格式如下例所示: 我看到很多关于如何解密RSA文本的例子,如下所示: public static byte[] decryptRSA( PublicKey key, byte[] text) throws Exception { byte[] dectyptedText = null; Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); cipher.init(Cipher.DECRYPT_MODE, key); dectyptedText = cipher.doFinal(text); return dectyptedText; } 但我的问题是,如何从文件中获得正确的PublicKey实例? 没有这个例子。 如果我只是尝试: InputStream is = getResources().openRawResource(R.raw.public); DataInputStream dis = new DataInputStream(is); byte [] keyBytes = new […]