Articles of 密钥库

在Android设备上存储新密码后,“stream不代表PKCS12密钥存储”

我写了一个使用KeyStore来validationSSL连接的Android应用程序。 但是,当我用正确的密钥加载p12文件并存储一个新的,下一次我尝试加载它与新的密钥我得到这个exception: java.io.IOException:stream不代表PKCS12密钥库 在com.android.org.bouncycastle.jce.provider.JDKPKCS12KeyStore.engineLoad(JDKPKCS12KeyStore.java:691) 在java.security.KeyStore.load(KeyStore.java:589) 出了什么问题? 非常感谢你!

使用在source / build / target / product / security /

那么正如标题所述,我正在尝试使用platform.x509.pem和platform.pk8签署我的应用程序。 问题是,当我使用keytool-importkeypairs来添加这样的错误时: keytool-importkeypair -k ~/.android/debug.keystore -p android -pk8 platform.pk8 -cert platform.x509.pem -alias platform 而且在尝试使用SignApk.jar直接签名APK时也会出现如下错误: java -jar SignApk.jar platform.x509.pem platform.pk8 test-app.apk test-app-signed.apk Keytool-importkeypairs错误: Error decrypting key 3074042056:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1319: 3074042056:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:381:Type=PKCS8_PRIV_KEY_INFO unable to load private key 3074091208:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:696:Expecting: ANY PRIVATE KEY Importing "platform" with unable to load certificate 3073755336:error:0906D06C:PEM routines:PEM_read_bio:no […]

如何知道.apk文件用于密钥库签名?

我有一个密钥库和一个apk。 有没有一个工具或方法来检查文件apk,从这个密钥库签名? 我使用Eclipse。 有人帮助我。 非常感谢

发布未签名的.apk文件的问题?

关于签名和未签名的.apk文件有很多问题。对于testing和debugging,我们可以使用bin文件夹内生成的无符号.apk文件。 这个apk文件使用一个虚拟keystore文件生成。 我的问题是为什么我们需要使用签名的apk。 我们不能发布未签名的apk。 那有什么问题?

我无法通过keytool获取SHA1证书

我正在尝试使用以下命令在macos sierra上查找我的签名密钥存储区的SHA1哈希值: keytool -exportcert -alias androiddebugkey -keystore $HOME/.android/debug.keystore -list -v -storepass android 结果如下所示: 别名:androiddebugkey 创作date:2017年10月25日 inputtypes:PrivateKeyEntry 证书链长度:1 证书[1]: keytool错误:java.util.IllegalFormatConversionException:d!= java.lang.String java.util.IllegalFormatConversionException:d!= java.base中的java.lang.String / java.util.Formatter $ FormatSpecifier.failConversion(Formatter.java: 4331)在java.base / java.util.Formatter $ FormatSpecifier.printInteger(Formatter.java:2846)在java.base / java.util.Formatter $ FormatSpecifier.print(Formatter.java:2800)at java.base / java 。java.util.Formatter.format(Formatter.java:2581)在java.base / java.util.Formatter.format(Formatter.java:2517)位于java.base / java.lang.String.format(String.java:2747 )在java.base / sun.security.tools.keytool.Main.printX509Cert(Main.java:3182)在java.base / sun.security.tools.keytool.Main.withWeak(Main.java:3151)。基于/ sun.security.tools.keytool.Main.doPrintEntry(Main.java:1995)在java.base / sun.security.tools.keytool.Main.doCommands(Main.java:1212)在java.base / sun。 security.tools.keytool.Main.run(Main.java:397)at java.base […]

更改密码后,KeyStore getEntry返回null

您好我有一个程序,需要在密钥库中存储一个密钥,我生成一个配对密钥,我签署了一个价值观,这一切都完美的作品。 当用户转到首选项并更改密码或将密码模式更改为引脚模式时,就会出现问题。 之后,当我尝试访问私钥keystore返回给我一个空值。 我知道keysotore值是用解锁密码值签名的,但是我相信如果用户改变了密码,keystore会用新密钥来辞职,但事实并非如此。 我做错了什么? 如果不是这样的话,还有什么办法可以更改密码并手动进行? 这是我正在使用的代码。 KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore"); kpg.initialize(new KeyPairGeneratorSpec.Builder(context) .setAlias(ALIAS) .setStartDate(now) .setEndDate(end) .setSerialNumber(BigInteger.valueOf(1)) .setSubject(new X500Principal("CN=test1")) .build()); KeyPair kp = kpg.generateKeyPair(); 这是获取密钥库的代码 KeyStore ks = KeyStore.getInstance("AndroidKeyStore"); ks.load(null); KeyStore.Entry entry = ks.getEntry(ALIAS, null); if (!(entry instanceof KeyStore.PrivateKeyEntry)) { Log.w("borrar", "Not an instance of a PrivateKeyEntry"); return null; } 谢谢,

在本地安全地存储密钥或密码

我正在做一个Android应用程序,目前,我有我的服务器的用户名和密码写在我的代码(这是不是很安全)常量。 我在网上进行了研究,但是我找不到能够完全保护用户密码或至less防止黑客入侵的东西。 任何人都可以帮助我如何在Android上本地安全地存储密码? 谢谢!

是否可以通过使用与最初使用的证书不同的证书签名来发布更新的应用程序

是否有可能发布一个Android应用程序的更新,通过签署一个不同于最初使用的证书的证书? 我知道,当我们尝试将这样的构build上传到市场时,它通常会给出错误消息。 但是有没有什么出路,比如把它作为一个主要版本,指定在市场上的某个地方?

如何在Android密钥库中使用密钥哈希消息validation码(HMAC)

我正在调查使用Android的KeyStore棉花糖和以上。 我想通过采用HMAC来同时validation数据完整性和数据validation。 我如何去实现这个? 我目前正在生成一个encryption/解密密钥如下: – mKeyStore = KeyStore.getInstance(keyStoreName); mKeyStore.load(mKeyStoreLoadStoreParameter); if (mKeyStore.containsAlias(keyStoreAlias)) { mSecretKey = (SecretKey) mKeyStore.getKey(keyStoreAlias, KEY_STORE_PASSWORD); } else { final KeyGenerator keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, keyStoreName); final int keyPurpose = KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT; keyGenerator.init( new KeyGenParameterSpec.Builder(keyStoreAlias, keyPurpose) .setKeySize(KEY_STORE_KEY_SIZE) .setBlockModes(KeyProperties.BLOCK_MODE_GCM) .setRandomizedEncryptionRequired(true) .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE) .build()); mSecretKey = keyGenerator.generateKey(); 我发现这个例子来生成HMAC的 SecretKey key = …; // HMAC key of algorithm […]

良好做法:如何处理android / java中的密钥库密码?

假设密钥库的密码不是由用户密码提供的(或多或less意味着它只是代码中的一个String或Array []),那么它是一个足够的保护,它不能或几乎不能被提取出来的字节码? 我知道密钥库(JKS / BKS)的密码只是用来validation密钥库的完整性。 此外,我完全清楚,我必须假设一个应用程序运行在一个或多或less的可信赖的环境中以“安全”。 但无论如何,是否有可能从apk文件中提取密码? 在应用程序的源代码中硬编码任何密码只是感觉不对,所以也许有一些想法,如何使它实际上更less的威胁。 例如,将密码configuration在外部configuration文件中,还是在安装应用程序期间随机生成密码(以及应该在哪里存储)?