❶ android stdio打包apk怎么创建密钥
(1)Android Studio菜单Build->Generate Signed APK
(2)弹出窗口
(3)创建密钥库及密钥,创建后会自动选择刚拍升创建的密钥库和密钥(已拥有密钥库跳过)
点击“Create new...”按钮创建密钥库
Key store path:密钥库文件的地址
Password/Confirm:密钥库的密灶枯码
Key:
Alias:密钥名称
Password/Confirm:密钥密码
Validity(years):密钥有效时间
First and Last Name:密钥颁发者姓名
Organizational Unit:密钥颁发组织
City or Locality:城市
Country Code(XX):国家
(4)选择已存在密钥库及密钥(在(3)中创建密钥库后跳过此步骤)
点击“Choose existing...”按钮找到密钥库文件
Key store password输入已选择的密钥库文件的密码
点击Key alias后的“...”按钮,选择或者创建一袭辩老个密钥
(5)点击“Next”按钮,选择保存路径后,点击“Finish”按钮完成
❷ android 密钥 怎么加密
有这样2个类:
KeyGenerator:此类提供(对称)密钥生成器的功能。
Cipher:此类为加密和解密提供密码功能。
在加密和解密过程中Cipher会使用到KeyGenerator生成的key进行加密(生成密文)和解密(解析密文)
[java] view plainprint?
01.public class Main {
02. public static void main(String[] args) throws NoSuchAlgorithmException, UnsupportedEncodingException {
03. //-------------------加密过程---------------------------------
04. //产生一个key,需要关联一种“DES”算法
05. KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
06. SecretKey deskey = keyGenerator.generateKey();
07. //需要加密的info
08. String info = "12345678";
09. //输出加密前的密文内容
10. System.out.println(""+info);
11. //产生一个Random
12. SecureRandom sr = new SecureRandom();
13. byte[] cipherByteEncrypt = null;
14. try {
15. Cipher c1 = Cipher.getInstance("DES");
16. c1.init(Cipher.ENCRYPT_MODE, deskey, sr);
17. //生成密文
18. cipherByteEncrypt = c1.doFinal(info.getBytes());
19. } catch (Exception e) {
20. e.printStackTrace();
21. }
22. //输出加密后的密文内容
23. System.out.println(""+new String(cipherByteEncrypt,"ISO-8859-1"));
24.
25.
26. //-------------------解密过程-----------------------------------
27. //产生一个Random
28. sr = new SecureRandom();
29. byte[] cipherByteDecrypt = null;
30. try {
31. Cipher c1 = Cipher.getInstance("DES");
32. c1.init(Cipher.DECRYPT_MODE, deskey, sr);
33. //解析密文
34. cipherByteDecrypt = c1.doFinal(cipherByteEncrypt);
35. } catch (Exception e) {
36. e.printStackTrace();
37. }
38. System.out.println(""+new String(cipherByteDecrypt,"ISO-8859-1"));
39.
40. }
41.
42.}
public class Main {
public static void main(String[] args) throws NoSuchAlgorithmException, UnsupportedEncodingException {
//-------------------加密过程---------------------------------
//产生一个key,需要关联一种“DES”算法
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
SecretKey deskey = keyGenerator.generateKey();
//需要加密的info
String info = "12345678";
//输出加密前的密文内容
System.out.println(""+info);
//产生一个Random
SecureRandom sr = new SecureRandom();
byte[] cipherByteEncrypt = null;
try {
Cipher c1 = Cipher.getInstance("DES");
c1.init(Cipher.ENCRYPT_MODE, deskey, sr);
//生成密文
cipherByteEncrypt = c1.doFinal(info.getBytes());
} catch (Exception e) {
e.printStackTrace();
}
//输出加密后的密文内容
System.out.println(""+new String(cipherByteEncrypt,"ISO-8859-1"));
//-------------------解密过程-----------------------------------
//产生一个Random
sr = new SecureRandom();
byte[] cipherByteDecrypt = null;
try {
Cipher c1 = Cipher.getInstance("DES");
c1.init(Cipher.DECRYPT_MODE, deskey, sr);
//解析密文
cipherByteDecrypt = c1.doFinal(cipherByteEncrypt);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(""+new String(cipherByteDecrypt,"ISO-8859-1"));
}
}输出:
12345678
3M±@*:?;???+j??? ---------------->这是密文
12345678
❸ 如何发布android应用程序,app增加签名证书(安卓签名证书)
Android系统要求,所有的程序经过数字签名后才能安装。Android系统使用这个证书来识别应用程序的作者,并且建立程序间的信任关系。证书不是用于用户控制哪些程序可以安装。证书不需要授权中心来签名:Android应用程序上使用自己签名的证书是完全允许且普遍的。
理解Android应用程序签名有以下几个重要点:
·所有的应用程序都必须签名。系统不会安装任何一个不签名的程序。
·你可以使用自己的证书来签名。不需要任何授权中心。
·当你要为最终用户发布你的应用程序的时候,你必须签入一个合适的密钥。你不可以发布程序的时候还使用SDK工具签入的DebugKey。
·系统只在安装应用程序的时候检测证书的有效期。如果应用程序在安装之后证书失效了,那么,应用程序还是可以正常工作。
·你可以使用标准工具——Keytool和Jarsigner——生成Key并签名apk文件。
·一旦你为应用程序签名了,一定要使用zipalign工具来优化最终的APK包。
Android系统不会安装和运行没有正确签名的应用程序。这条规则适用于任何运行Android系统的地方,不管是真机还是模拟器。正是由于这个原因,你必须在模拟器或真机上运行/调试程序之前对程序进行签名。
当你调试应用程序时,AndroidSDK工具替你对应用程序进行了签名。Eclipse的ADT插件和Ant编译工具都提供了两种签名模式——Debug模式和Release模式。
·当开发和测试时,你可以使用Debug模式。在Debug模式下,编译工具使用内嵌在JDK中的Keytool工具来创建一个keystore和一个key(包含公认的名字和密码)。在每次编译的时候,使用这个DebugKey来为apk文件签名。由于密码是公认的,在每次编译的时候,也不需要提示你输入keystore和key密码。
·当你的程序准备发布时,你必须型猛在Release模式下,使用密钥来为apk文件签名。有以下两种方式可以做到:
1.命令行中使用Keytool和Jarsigner。在这个方法中,首先需要编译出一个未签名的apk。然后使用Jarsigner(或相似的工具),用你的密钥为apk手动签名。如果你没有合适的密钥,你可以运行Keytool来手动生成自己的keystore/key。
2.使用ADT导出向导。如果你使用Eclipse/ADT插件进行开发,你可以使用导出向导来编译程序,生成密钥(如果需要),并为apk签名,所有这些操作都在导出向导中。一旦你的程序签名了,别忘了运行zipalign来为apk进行额外的优化。
签名策略
应用程序签名的某些方面可能会影响应用程序的开发,特别是你打算一起发布多个应用程序的时候。一般来说,推荐的策略是在整个应用程序寿命内,所有的程序签上相同的证书。卜陆桥
以下有几个应该这么做的原因:
·应用程序升级——当你对应用程序进行升级时,悉腊如果你想用户平稳的升级,那么,你就需要签上相同的证书。当系统安装一个升级应用程序时,如果新版本的证书与老版本的证书有匹配的话,那么,系统才会允许进行升级。如果你没有为版本签上合适的证书,当你安装时,你需要给应用程序指定一个新的包名——在这种情况下,用户安装的新版本,被当作是一个全新的应用程序。
·应用程序模块化——如果应用程序请求的话,Android系统允许签有相同证书的应用程序运行在相同的进程里,这样,系统就会把它们看作是一个单一的应用程序。用这种方法配置应用程序,用户可以选择更新每个独立的模块。
·代码/数据权限共享——Android系统提供了基于签名的权限检查,因此,如果应用程序间签有特定的证书,那么,它们之间可以共享功能。通过多个程序签有相同的证书并且使用基于签名的权限检查,你的程序可以以一种安全的方式共享代码和数据。还有一个决定签名策略的重要因素是:如何设定key的有效期。
·如果你计划支持单个应用程序的升级,你需要确保你的key拥有一个超过期望的应用程序生命周期的有效期。推荐使用25年或更多的有效期。当你的key过期了,用户也就不能平稳的更新到新版本了。
·如果你想给多个无关的应用程序签上相同的key,那么,你必须确保key的有效期超过所有应用程序所有版本的生命周期,包括将来有可能添加到这一阵营的程序。
·如果你想在上发布你的程序,key的有效期必须在2033.10.22以后。Market服务器强制这一要求,目前是保证用户可以平稳的更新他们的程序。
当你设计应用程序时,一定要把这些点记在脑子里,并且使用一个合适的证书来为应用程序签名。
签名的基本设定
在你开始之前,你必须保证Keytool对SDK编译工具来说是可利用的。多数情况下,你可以通过设置JAVA_HOME环境变量来告诉SDK编译工具如何找到Keytool。另外,你还可以添加JDK中Keytool的路径到PATH的变量里。
如果你在Linux上开发,并且使用GNU编译器来编译Java,那么,请确保系统是使用JDK中的Keytool,而不是gcj。如果Keytool已经在你的PATH中,它有可能是对/usr/bin/keytool的符号链接。在这种情况下,检查符号链接的目标,确保它是指向JDK中的Keytool。如果你打算对公众释放你的应用程序,你还需要Jarsigner工具。Jarsigner和Keytool都包含在JDK中。
Debug模式下签名
Android编译工具提供了Debug签名模式,使得开发和调试应用程序更加容易,而且还满足Android系统的签名要求。当使用Debug模式编译你的app时,SDK工具会调用Keytool工具自动创建一个Debug的keystore和key。然后,这个Debugkey会自动用于apk的签名,这样,你不需要使用你自己的key来为应用程序包签名。
SDK工具使用预先定义好的名字/密码来创建/key:
·Keystore名字:“debug.keysotre”
·Keystore密码:“android”
·Key别名:“”
·Key密码:“android”
·CN:“CN=,O=Android,C=US”
如果需要的话,你可以改变/key的位置和名字,或者提供一个自定义的/key。然而,任何自定义的/key必须使用和默认Debugkey(上面描述的)相同的名字和密码。(在Eclipse/ADT中,操作Windows>Preferences>Android>Build实现。)
注意:你不能将签有Debug证书的应用程序发布给公众。
Eclipse用户
如果你在Eclipse/ADT下开发(并且已经按照上面描述的“签名的基本设定”配置了Keytool),Debug模式下签名默认是开启的。当你运行或是调试应用程序时,ADT会使用Debug证书进行签名,并运行zipalign,然后安装到选择的模拟器或是连接上的设备。整个过程不需要你参与,前提是ADT能访问Keytool。
Ant用户
如果你使用Ant来编译你的apk文件,需要在ant命令中添加debug选项来开启Debug签名模式(假设你正在使用由android工具生成build.xml文件)。当你运行antdebug来编译你的程序时,编译脚本会生成一个keystore/key,并为apk进行签名。然后脚本会使用zipalign工具对apk进行对齐处理。整个过程不需要你参与。阅读“其它IDE下开发:Debug模式编译”来了解更多的信息。
Debug证书过期
Debug模式下签名用的证书(默认是Eclipse/ADT和Ant编译)自从它创建之日起,1年后就会失效。
当证书失效时,你会得到一个编译错误,在Ant编译上,错误如下:
debug:
[echo]/samples-debug.apk,...
[exec]/4/083:43PM
在Eclipse/ADT中,Android控制台上你将会看到一个相似的错误。
为了解决这个问题,只需要删掉debug.keystore文件即可。AVD默认存储的位置在:~/.android/avd(OSX和Linux),C:.android(WindowsXP),C:Users.android()。
当下一次编译的时候,编译工具会重新生成一个新的keystore和Debugkey。
Release模式下签名
当你的程序准备好释放给其它用户时,你必须:
1.获取一个合适的密钥
2.在Release模式下编译程序
3.使用密钥签名程序
4.对齐APK包
如果你是使用Eclipse/ADT插件开发,你可以使用导出向导来完成编译、签名和对齐等操作。在整个过程中,导出向导甚至还可以生成一个新的keystore和密钥。因此,如果你使用Eclipse,你可以直接跳到“使用EclipseADT编译和签名”。
获取一个合适的密钥为了进行程序的签名,首先,你必须有一个合适的密钥。密钥指:
·个人持有。
·代表个人、公司或组织实体的身份。
·拥有一个有效期。有效期推荐超过25年。
如果你在上发布你的程序,需要注意一点的是:程序的有效期需要在2033.10.22之后。你不能上传一个应用程序,而它的key的有效期是在这个日期之前。
·不是由AndroidSDK工具生成的Debugkey。
如果你没有一个合适的key,你一定要使用Keytool来生成一个。如“基本设定”中描述的,确保Keytool可用。
为了用Keytool生成一个key,使用keytool命令并传入一些可选参数,如下表所示。
警告:确保密钥的安全。一定要阅读“安全储存你的密钥”中讨论如何确保你的密钥的安全以及这对你和用户为何如此重要。尤其是,当你生成你的密钥时,一定要为keystore和key使用强密码。
❹ 使用android的keystore生成秘钥,sha256异常
因为工作需要最近开始接触Android,在APP测试版本更新时发现签名冲突不能正确安装,这才了解到还需要签名。
在这里说两种签名的方式:
第一种是用eclipse
第二种是用Android自带的需要dos下试用命令生成
命令如下:keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore
右键项目>>>Android Tools>>>Export Signed Application Package...>>>>Next >>>>选择create new keystore 这里选择保存的地址输入两次密码>>>>填写基本信息和下边看到的一样
下边图在生成android.keystore后试用keytool -list -v -keystore命令查看了android.keystore中的内容
❺ android staido 怎么生成密钥
先打包一次,形成铅滑keystore文件,然后 cmd 打开到keystore文件目录下 输空迟入keytool -v -list -keystore 你斗激李自己的keystore名字.jks
❻ Android使用RSA加密和解密
1.data是要加密的数据,如果是字符串则getBytes。publicKey是公钥,privateKey是私钥。自定义密钥对测试
2.从文件中读取公钥
当加密的数据过长时,会出现javax.crypto.IllegalBlockSizeException: Data must not be longer than 117 bytes的异常。rsa算法规定一次加密的数据不能超过生成密钥对时的keyLength/8-11,keyLength一般是1024个字节,则加密的数据不能超过117个字节
测试分段加密和解密
生成公钥和私钥后,用base64编码
一、android加密的数据服务器上无法解密?
android的rsa加密方式是RSA/ECB/NoPadding,而标准jdk是RSA/ECB/PKCS1Padding,所以加密时要设置标准jdk的加密方式
二、base64编码。因为不同的设备对字符的处理方式不同,字符有可能处理出错,不利于传输。所以先把数据做base64编码,变成可见字符,减少出错
官方提供的base64类,Base64.encode编码,Base64.decode解码。用这个会有换行符,需要自定义
三、rsa是非对称加密算法。依赖于大数计算,加密速度比des慢,通常只用于加密少量数据或密钥
四、公钥加密比私钥加密块,公钥解密比私钥解密慢。加密后的数据大概是加密前的1.5倍
❼ Android KeyStore密钥存储
利用 Android KeyStore System,您可以在容器中存储加密密钥,从而提高从设备中提取密钥的难度。在密钥进入密钥库后,可以将它们用于加密操作,而密钥材料仍不可导出。此外,它提供了密钥使用的时间和方式限制措施,例如要求进行用户身份验证才能使用密钥,或者限制为只能在某些加密模式中使用。
密钥库系统由 KeyChain API 以及在 Android 4.3(API 级别 18)中引入的 Android 密钥库提供程序功能使用。本文说明了何时以及如何使用 Android 密钥库提供程序。
1、 存储密匙:Android提供的这个KeyStore最大的作用就是不需要开发者去维护这个密匙的存储问题,相比起存储在用户的数据空间或者是外部存储器都更加安全。注意的是这个密匙随着用户清除数据或者卸载应用都会被清除掉。
2、得益于Android独立的一套密匙库系统,可以提高安全性
Android 密钥库系统可以保护密钥材料免遭未经授权的使用。首先,Android 密钥库可以防止从应用进程和 Android 设备中整体提取密钥材料,从而避免了在 Android 设备之外以未经授权的方式使用密钥材料。其次,Android 密钥库可以让应用指定密钥的授权使用方式,并在应用进程之外强制实施这些限制,从而避免了在 Android 设备上以未经授权的方式使用密钥材料。
Android 密钥库密钥使用两项安全措施来避免密钥材料被提取:
为了避免在 Android 设备上以未经授权的方式使用密钥材料,在生成或导入密钥时 Android 密钥库会让应用指定密钥的授权使用方式。一旦生成或导入密钥,其授权将无法更改。然后,每次使用密钥时,都会由 Android 密钥库强制执行授权。这是一项高级安全功能,通常仅用于有以下要求的情形:在生成/导入密钥后(而不是之前或当中),应用进程受到攻击不会导致密钥以未经授权的方式使用。
支持的密钥使用授权可归为以下几个类别:
作为一项额外的安全措施,对于密钥材料位于安全硬件内部的密钥(请参阅 KeyInfo.isInsideSecurityHardware()),某些密钥使用授权可能由安全硬件实施,具体取决于 Android 设备。加密和用户身份验证授权可能由安全硬件实施。由于安全硬件一般不具备独立的安全实时时钟,时间有效性间隔授权不可能由其实施。
您可以使用 KeyInfo.() 查询密钥的用户身份验证授权是否由安全硬件实施。
在需要系统级凭据时请使用 KeyChain API。在应用通过 KeyChain API 请求使用任何凭据时,用户需要通过系统提供的 UI 选择应用可以访问已安装的哪些凭据。因此,在用户同意的情况下多个应用可以使用同一套凭据。
使用 Android 密钥库提供程序让各个应用存储自己的凭据,并且只允许应用自身访问。这样,应用可以管理仅能由自己使用的凭据,同时又可以提供等同于 KeyChain API 为系统级凭据提供的安全优势。这一方法不需要用户选择凭据。
要使用此功能,请使用标准的 KeyStore 和 KeyPairGenerator 或 KeyGenerator 类,以及在 Android 4.3(API 级别 18)中引入的 AndroidKeyStore 提供程序。
AndroidKeyStore 注册为 KeyStore 类型以用于 KeyStore.getInstance(type) 方法,而在用于 KeyPairGenerator.getInstance(algorithm, provider) 和 KeyGenerator.getInstance(algorithm, provider) 方法时则注册为提供程序。
生成新的 PrivateKey 要求您同时指定自签署证书具备的初始 X.509 属性。之后,您可以使用 KeyStore.setKeyEntry 将证书替换为由证书颁发机构 (CA) 签署的证书。
要生成密钥,请使用 KeyPairGenerator 和 KeyPairGeneratorSpec:
要生成密钥,请使用 KeyGenerator 和 KeyGenParameterSpec。
AndroidKeyStore 提供程序的使用通过所有的标准 KeyStore API 加以实现。
通过调用 aliases() 方法列出密钥库中的条目:
通过从密钥库提取 KeyStore.Entry 并使用 Signature API(例如 sign())签署数据:
类似地,请使用 verify(byte[]) 方法验证数据:
生成密钥或将密钥导入到 AndroidKeyStore 时,您可以指定密钥仅授权给经过身份验证的用户使用。用户使用安全锁定屏幕凭据(模式/PIN/密码、指纹)的子集进行身份验证。
这是一项高级安全功能,通常仅用于有以下要求的情形:在生成/导入密钥后(而不是之前或当中),应用进程受到攻击不会导致密钥被未经身份验证的用户使用。
如果密钥仅授权给经过身份验证的用户使用,可以将其配置为以下列两种模式之一运行:
❽ Android密钥库系统KeyStore
利用 Android 密钥库系统,您可以在容器中存储加密密钥,从而提高从设备中提取密钥的难度。在密钥进入密钥库后,可以将它们用于加密操作,而密钥材料仍不可导出。此外,它提供了密钥使用的时间和方式限制措施,例如要求进行用户身份验证才能使用密钥,或者限制为只能在某些加密模式中使用。
密钥库系统并不是让程序直接进行存储程序的私密信息的,比如说用户账号密码,册陵桥其提供了一个密钥安全容器,保护密钥材料免遭未经授权的使用,一个应用程序可以在密钥库中存储多个密钥并且只允许应用自身访问,应用程序可以在密钥库系统中生成,存储,获取存储其中的公钥或者私钥,因此可使用密钥库系统中的密钥来进行数据的加密。
密钥库系统由 KeyChain API 以及在 Android 4.3(API 级别 18)中引入的 Android 密钥库提供程序功能使用。
安卓系统提供了下面几种KeyStore类型:
各种类型的详细说明可以参考: https://developer.android.com/openjdk-redirect.html?v=8&path=/technotes/guides/security/StandardNames.html#KeyStore
先州猛创建一个Activity,自定义布局从页面上来实现几种功能
效果图:
说明:
1.输入框输入要增加的密钥的名称,点击添加按钮进行添加一个新密钥;
2.输入框输入要删除的密钥的名称,点击删除按钮进行删除一个已存在的密钥;
3.这里指定了数据明文,点击密钥列表中的item可选中指定的密钥,用于使用密钥进行加密和解密,选中密钥后,可点击加密按钮进行加密,加密后可点击解密按钮进行解密;
4.密钥列表显示当前应用在密钥库系统中生成了的密钥,长按可删除密钥;
MainActivity
密钥库系统工具类
生成密钥时使用X500Principal指定了自签署证书,参数分别代表汪游
CN:通用名称
O:组织
OU:组织单元
C:国家
并且指定密钥的有效时间,并且指定了用于生成密钥对的自签名证书的序列号。
这里指定了通过密钥库系统生成RSA密钥。
先从密钥库中取出密钥,使用公钥进行加密
先从密钥库中取出密钥,使用私钥进行解密
使用密钥对数据签名,签名算法须与秘钥算法保持一致。
使用密钥对数据进行签名认证,签名算法须与秘钥算法保持一致。
密钥库支持的算法可参考: https://developer.android.com/training/articles/keystore
demo链接: https://github.com/samlss/KeyStore
❾ androidapp如何制作验证license
首先生成一个随机的塌改毕AES密钥(16位即可),用来加密授权信息团芹,完成明文信息的脱敏。然后将整段加密后的授权信息使用私钥进行签名歼野,拼接生成的字符串就是最终的激活码了。
❿ Hbuilder打包时Android的keystore怎么生成
生成android的keystore文件有以下两种如携梁方法:
一、eclipse 中生成android keystore
1、建立任意一个android项目(例如:AntForAndroid)
2、右键AntForAndroid根目录弹出菜单->Android Tools -> Export Signed Application Package->Next >
3、创建密钥库keystore,输入密钥库导出位置和密码,记住密码,下次Use existing keystore会用到
4、选择“Create new keystore”并且保存在项目跟目录下,输入密码,然后next
5、填写隐宴密钥库信息,填写一些apk文件的密码,使用期限渣运和组织单位的信息。填写的Alias 和 密码不要忘记了
6、生成带签名的apk文件,到此就结束了。
7、如果下次发布版本的时候,使用前面生成的keystore再签名。
这样在项目根目录下就生成以上流程产生的androids.keystore了
二、命令行生成keystore
dos下进入JDK的bin目录
运行如下命令:
keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore
(-validity 20000代表有效期天数),命令完成后,bin目录中会生成android.keystore
查看命令keytool -list -keystore "android.keystore" 输入设置的keystore密码