首页编程java编程java rsa sha1 是什么意思?安卓签名是什么 安卓签名是sha1吗

java rsa sha1 是什么意思?安卓签名是什么 安卓签名是sha1吗

编程之家2023-10-11117次浏览

大家好,今天小编来为大家解答java rsa sha1 是什么意思这个问题,安卓签名是什么 安卓签名是sha1吗很多人还不知道,现在让我们一起来看看吧!

java rsa sha1 是什么意思?安卓签名是什么 安卓签名是sha1吗

openssl ou=,cn 什么意思

您好,使用openssl生成自我认证证书的过程中碰到了一下问题,我所有的操作为:

1. openssl的windows安装文件的版本:openssl-0.9.8h-1-setup.exe

2.双击安装,我的安装位置为:C:\OpenSSL

java rsa sha1 是什么意思?安卓签名是什么 安卓签名是sha1吗

3.配置环境变量

OPENSSL_HOME C:\OpenSSL

path%OPENSSL_HOME%\bin

java rsa sha1 是什么意思?安卓签名是什么 安卓签名是sha1吗

4.修改文件openssl.cnf

%OPENSSL_HOME%\share\openssl.cnf

注意变量dir,它指向的是CA工作目录,本文将路径d:/ca作为CA工作目录,对变量dir做相应修改。

修改后:

####################################################################

[ CA_default ]

dir= d:/ca# Where everything is kept

certs=$dir/certs# Where the issued certs are kept

crl_dir=$dir/crl# Where the issued crl are kept

database=$dir/index.txt# database index file.

#unique_subject= no# Set to'no' to allow creation of

# several ctificates with same subject.

new_certs_dir=$dir/newcerts# default place for new certs.

certificate=$dir/cacert.pem# The CA certificate

serial=$dir/serial# The current serial number

crlnumber=$dir/crlnumber# the current crl number

# must be commented out to leave a V1 CRL

crl=$dir/crl.pem# The current CRL

private_key=$dir/private/cakey.pem# The private key

RANDFILE=$dir/private/.rand# private random number file

5.建立CA工作目录后,我们需要构建一些子目录,用于存放证书、密钥等。

如下通过bat文件实现

@rem根据前面配置的CA工作目录,我这里为d:/ca

@echo off

echo新建CA目录ca

set dir=d:\ca

if exist%dir% goto okDir

echo目录%dir%不存在

mkdir%dir%

echo目录创建成功

:okDir

cd%dir%

d:

echo构建已发行证书存放目录certs

mkdir certs

echo构建新证书存放目录newcerts

mkdir newcerts

echo构建私钥存放目录private

mkdir private

echo构建证书吊销列表存放目录crl

mkdir crl

echo构建索引文件index.txt

echo 0>index.txt

echo构建序列号文件serial

echo 01>serial

echo构建随机数private/.rand

@rem openssl的命令参数随机数

openssl rand-out private/.rand 1000

@pause

6.创建证书

OpenSSL通常使用PEM(Privacy Enbanced Mail,隐私增强邮件)编码格式保存私钥。

构建根证书私钥

C:\OpenSSL>openssl genrsa-aes256-out e:\lcl.pem 2048

Loading'screen' into random state- done

Generating RSA private key, 2048 bit long modulus

......+++

......+++

e is 65537(0x10001)

Enter pass phrase for lcl.pem:

Verifying- Enter pass phrase for lcl.pem:

查看证书私钥信息

C:\OpenSSL>openssl rsa-noout-text-in e:\lcl.pem

Enter pass phrase for e:\lcl.pem:

Private-Key:(2048 bit)

modulus:

如果你觉得lcl.pem的保护密码太麻烦想去掉的话:

openssl rsa-in e:\lcl.pem-out e:\lcl.pem.unsecure

不过不推荐这么做

生成根证书签发申请

C:\OpenSSL>openssl req-new-verbose-key e:\lcl.pem-out e:\lcr.csr-days 365-config C:\OpenSSL\share\openssl.cnf-subj"/c=CN/st=BJ/l=HD/o=HANSKY/ou=STS/cn=LCR"

Using configuration from C:\OpenSSL\share\openssl.cnf

Enter pass phrase for e:\lcl.pem:

Loading'screen' into random state- done

Subject Attribute c has no known NID, skipped

Subject Attribute st has no known NID, skipped

Subject Attribute l has no known NID, skipped

Subject Attribute o has no known NID, skipped

Subject Attribute ou has no known NID, skipped

Subject Attribute cn has no known NID, skipped

得到根证书签发申请文件后,我们可以将其发送给CA机构签发。当然,我们也可以自行签发根证书。

7.签发根证书

C:\OpenSSL>openssl x509-req-days 365-sha1-extensions v3_ca-signkey e:\lcl.pem-in e:\lcr.csr-out e:\lcr.cer

Loading'screen' into random state- done

Signature ok

subject=

Getting Private key

Enter pass phrase for e:\lcl.pem:

8.根证书转换

OpenSSL产生的数字证书不能在Java语言环境中直接使用,需要将其转化为PKCS#12编码格式。

C:\OpenSSL>openssl pkcs12-export-cacerts-inkey e:\lcl.pem-in e:\lcr.cer-out e:\ca.p12

Loading'screen' into random state- done

Enter pass phrase for e:\lcl.pem:

Enter Export Password:

Verifying- Enter Export Password:

9.查看密钥库信息

个人信息交换文件(PKCS#12)可以作为密钥库或信任库使用,我们可以通过KeyTool查看该密钥库的详细信息。

keytool-list-keystore e:\ca.p12-storetype pkcs12-v-storepass aaaaaaa

在这里出现错误:

keytool错误: java.security.cert.CertificateParsingException: Empty issuer DN not allowed in X509Certificates

在网上也查阅了一些资料,不过问题仍然没有解决,不知道是什么原因导致,我的操作参考了《java加密与解密的艺术》

另外麻烦大家给解释一下证书生成过程中后缀的问题,如keystore、pem、crt、cer登

安卓签名是什么 安卓签名是sha1吗

Android签名有什么作用?

平时我们的程序可以在模拟器上安装并运行,是因为在应用程序开发期间,由于是以Debug面试进行编译的,因此ADT根据会自动用默认的密钥和证书来进行签名,而在以发布模式编译时,apk文件就不会得到自动签名,这样就需要进行手工签名。给apk签名可以带来以下好处:1.、应用程序升级:如果你希望用户无缝升级到新的版本,那么你必须用同一个证书进行签名。这是由于只有以同一个证书签名,系统才会允许安装升级的应用程序。如果你采用了不同的证书,那么系统会要求你的应用程序采用不同的包名称,在这种情况下相当于安装了一个全新的应用程序。如果想升级应用程序,签名证书要相同,包名称要相同!2、应用程序模块化:Android系统可以允许同一个证书签名的多个应用程序在一个进程里运行,系统实际把他们作为一个单个的应用程序,此时就可以把我们的应用程序以模块的方式进行部署,而用户可以独立的升级其中的一个模块3、代码或者数据共享:Android提供了基于签名的权限机制,那么一个应用程序就可以为另一个以相同证书签名的应用程序公开自己的功能。以同一个证书对多个应用程序进行签名,利用基于签名的权限检查,你就可以在应用程序间以安全的方式共享代码和数据了。不同的应用程序之间,想共享数据,或者共享代码,那么要让他们运行在同一个进程中,而且要让他们用相同的证书签名。

apk签名是什么意思?

apk签名相当于程序的身份识别代码。

1、apk签名用于程序编译打包之后,手机在运行程序之前会先去验证程序的签名(可以看作类似于我们电脑上常说的md5)是否合法,只有通过了验证的文件才会被运行,所以签名软件的作用的让文件通过手机的验证为合法,不同的手机、系统是对应不同的签名的。

2、可以用签名工具来更改。比如手机签名工具ZipSigner 2,可以对手机上的文件进行直接签名,支持apk、zip及jar格式,方便刷机或汉化的朋友。有些爱好修改安卓apk软件的用户有时候需要对apk文件进行修改,但是如果在电脑上操作的话,打包签名是十分复杂的,还必须安装java环境,可以说打包一个包是十分麻烦的,这款签名工具可以解决上述遇到的问题。

android中如何确认使用的是什么平台签名

一、判断Apk是否签名用命令:jarsigner-verify-verbose-certs 1、如果有Android Debug字样就是debug2、如果已经签名: [证书的有效期为13-8-31下午2:31至41-1-16下午2:31]二、判断Apk签名是否一致jdk需要安装;想查demo.apk所使用的签名的fingerprint,可以这样做:1、查找apk里的rsa文件 Windows平台:> jar tf demo.apk findstr RSA Linux平台:$ jar tf demo.apk grep RSA META-INF/CERT.RSA 2、从apk中解压rsa文件 jar xf demo.apk META-INF/CERT.RSA 3、获取签名的fingerprints keytool-printcert-file META-INF/CERT.RSA证书指纹: MD5: 5A:5A:96:63:8E:EF:FC:66:9E:BC:1C:2A:A9:1E:E5:95 SHA1: 44:BD:33:2D:C5:21:AE:78:D5:04:92:1A:39:FD:AC:01:E2:32:3C:AB SHA256: 2F:C0:A3:8C:0D:42:84:70:48:78:44:A4:2E:64:5B:50:B3:B3:1E:33:94:62:A3:9F:2F:10:DD:EF:D7:CF:02:0B签名算法名称: SHA1withRSA版本: 3两个apk是否同签名,比较签名的MD5码或SHA1码,一样就是相同的,反之,不是。

Android签名有什么作用-apk签名可以带来的好处详细??

apk签名可以带来的好处

所有的Android应用程序都要求开发人员用一个证书进行数字签名,Android系统不会

安装没有进行签名的应用程序。

平时我们的程序可以在模拟器上安装并运行,是因为在应用程序开发期间,由于是以

Debug面试进行编译的,因此ADT根据会自动用默认的密钥和证书来进行签名,而在以发

布模式编译时,apk文件就不会得到自动签名,这样就需要进行手工签名。

给apk签名可以带来以下好处:

1.、应用程序升级:如果你希望用户无缝升级到新的版本,那么你必须用同一个证书进

行签名。这是由于只有以同一个证书签名,系统才会允许安装升级的应用程序。

如果你采用了不同的证书,那么系统会要求你的应用程序采用不同的包名称,在这种情

况下相当于安装了一个全新的应用程序。如果想升级应用程序,签名证书要相同,包名称要相同!

2.、应用程序模块化:Android系统可以允许同一个证书签名的多个应用程序在一个进

程里运行,系统实际把他们作为一个单个的应用程序,此时就可以把我们的应用程序以模块

的方式进行部署,而用户可以独立的升级其中的一个模块

3.、代码或者数据共享:Android提供了基于签名的权限机制,那么一个应用程序就可

以为另一个以相同证书签名的应用程序公开自己的功能。以同一个证书对多个应用程序进行

签名,利用基于签名的权限检查,你就可以在应用程序间以安全的方式共享代码和数据了。

4.不同的应用程序之间,想共享数据,或者共享代码,那么要让他们运行在同一个进程

中,而且要让他们用相同的证书签名。

标签:作文经典上一篇:梦见自己做饭什么意思梦见别人做饭什么意思下一篇:成语接龙民凋民什么凋什么成语接龙

android api签名是什么意思

android api签名是api调用的时候需要按照约定的参数生成一个字符串,对方接收到后校验参数,合法后接受请求并返回结果。

所有android端的API的有效访问URL包括以下三个部分:

1.资源访问路径,如/v1/deal/find_deals;

2.请求参数:即API对应所需的参数名和参数值param=value,多个请求参数间用&连接

如deal_id=1-85462&appkey=00000;

3.签名串,由签名算法生成

签名算法如下:

1.对除appkey以外的所有请求参数进行字典升序排列;

2.将以上排序后的参数表进行字符串连接,如key1value1key2value2key3value3...keyNvalueN;

3.将app key作为前缀,将app secret作为后缀,对该字符串进行SHA-1计算,并转换成16进制编码;

4.转换为全大写形式后即获得签名串

签名串获得后,将其作为sign参数附加到对应的URL中,即可正常访问API。

注意:请保证HTTP请求数据编码务必为UTF-8格式,URL也务必为UTF-8编码格式。

参考代码:

//定义申请获得的appKey和appSecret

String appkey="XXXXXXXX";

String secret="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";

String apiUrl="[api.dianping]";

//创建参数表

Map paramMap= new HashMap;

paramMap.put("format","json");

paramMap.put("city","上海");

paramMap.put("latitude","31.21524");

paramMap.put("longitude","121.420033");

paramMap.put("category","美食");

paramMap.put("region","长宁区");

paramMap.put("limit","20");

paramMap.put("radius","2000");

paramMap.put("offset_type","0");

paramMap.put("has_coupon","1");

paramMap.put("has_deal","1");

paramMap.put("keyword","泰国菜");

paramMap.put("sort","7");

//对参数名进行字典排序

String[] keyArray= paramMap.keySet.toArray(new String[0]);

Arrays.sort(keyArray);

//拼接有序的参数名-值串

StringBuilder stringBuilder= new StringBuilder;

stringBuilder.append(appkey);

for(String key: keyArray)

{

stringBuilder.append(key).append(paramMap.get(key));

}

stringBuilder.append(secret);

String codes= stringBuilder.toString;

//字符串连接示例

// XXXXXXXXcategory美食city上海formatjsonhas_coupon1has_deal1keyword泰国菜latitude31.21524limit20longitude121.420033offset_type0radius2000region长宁区sort7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

// SHA-1编码,这里使用的是Apache codec,即可获得签名(shaHex会首先将中文转换为UTF8编码然后进行sha1计算,使用其他的工具包请注意UTF8编码转换)

/*

*以下sha1签名代码效果等同

* byte[] sha=.apachemons.codec.digest.DigestUtils.sha(.apachemons.codec.binary.StringUtils.getBytesUtf8(codes));

* String sign=.apachemons.codec.binary.Hex.encodeHexString(sha).toUpperCase;

*/

String sign=.apachemons.codec.digest.DigestUtils.shaHex(codes).toUpperCase;

//签名示例

//7D78381BC58E1DB1DBA4BD965916FE6B4D5DC892

android应用签名怎么获取

1、

下载签名应用,在手机中运行,根据提示输入程序的包名获得一个apk签名字符串,最后将这个字符串填到第一步的应用签名栏处。保存即可正常调试应用了。

2、

选择程序-右键——android tools——签名发布,按步骤生成一个签名keystore和一个经过签名的apk,安装该APK到手机。

3、

选择自己的程序,右键运行到手机。

4、

android应用签名查看方法如下:

(1) debug的apk通过Eclipse查看,如下图:

(2)某个keystore签名的应用,通过

Javakeytool-list-keystoreE:\Trinea\keystore\appsearch.keystore查看,会要求输入签名密码,默认为android。

Android APK签名有什么用呢?

平时我们的程序可以在模拟器上安装并运行,是因为在应用程序开发期间,由于是以 Debug面试进行编译的,因此ADT根据会自动用默认的密钥和证书来进行签名,而在以发布模式编译时,apk文件就不会得到自动签名,这样就需要进行手工签名。给apk签名可以带来以下好处: 1.、应用程序升级:如果你希望用户无缝升级到新的版本,那么你必须用同一个证书进行签名。这是由于只有以同一个证书签名,系统才会允许安装升级的应用程序。如果你采用了不同的证书,那么系统会要求你的应用程序采用不同的包名称,在这种情况下相当于安装了一个全新的应用程序。如果想升级应用程序,签名证书要相同,包名称要相同! 2.、应用程序模块化:Android系统可以允许同一个证书签名的多个应用程序在一个进程里运行,系统实际把他们作为一个单个的应用程序,此时就可以把我们的应用程序以模块的方式进行部署,而用户可以独立的升级其中的一个模块 3.、代码或者数据共享:Android提供了基于签名的权限机制,那么一个应用程序就可以为另一个以相同证书签名的应用程序公开自己的功能。以同一个证书对多个应用程序进行签名,利用基于签名的权限检查,你就可以在应用程序间以安全的方式共享代码和数据了。 4.不同的应用程序之间,想共享数据,或者共享代码,那么要让他们运行在同一个进程中,而且要让他们用相同的证书签名。

什么是 android系统签名

签名后才可以正常安装,可以保证软件的唯一性,可以检验软件是否他人盗用;

安卓开发的过程中签名在什么情况下会变更

签名,是开发者对apk文件的加密,防止程序被盗版,因为Android系统是linux内核,程序的区分是通过包名package来区分的,那别人也可能开发一个同包名的应用,这时安桌系统就会判断一下,如果签名相同则替换,如果签名不同则不允许安装重复包名的应用。至于你说什么时候变更,通常开发者是不能变更签名的,你改了签名程序就不能更新安装了

运行android程序会默认生成签名吗

开发Android的人这么多,完全有可能大家都把类名,包名起成了一个同样的名字,这时候如何区分?签名这时候就是起区分作用的。

由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,签名可以保证相当名字,但是签名不同的包不被替换。

APK如果使用一个key签名,发布时另一个key签名的文件将无法安装或覆盖老的版本,这样可以防止你已安装的应用被恶意的第三方覆盖或替换掉。

这样签名其实也是开发者的身份标识。交易中抵赖等事情发生时,签名可以防止抵赖的发生。

二、签名的注意事项

Android系统要求所有的程序经过数字签名才能安装,如果没有可用的数字签名,系统将不许安装运行此程序。不管是模拟器还是真实手机。因此,在设备或者是模拟器上运行调试程序之前,必须为应用程序设置数字签名。

Android签名的数字证书不需要权威机构来认证,是开发者自己产生的数字证书,即所谓的自签名。数字证书用来标识应用程序的作者和在应用程序之间建立信任关系,而不是用来决定最终用户可以安装哪些应用程序。

系统仅仅会在安装的时候测试签名证书的有效期,如果应用程序的签名是在安装之后才到期,那么应用程序仍然可以正常启用。

可以使用标准工具-Keytool and Jarsigner-生成密钥,来签名应用程序的.apk文件。

签名后需使用zipalign优化程序。

模拟器开发环境,开发时通过ADB接口上传的程序会先自动被签有Debug权限,然后才传递到模拟器。Eclipse菜单的Window-> Preferences-> Android–> Build下显示的是我们默认的调试用的签名数字证书。

正式发布一个Android应用时,必须使用一个合适的私钥生成的数字证书来给程序签名,不能使用ADT插件或者ANT工具生成的调试证书来发布。

三、签名方法:

1.使用Keytool和jarsigner工具签名(在jdk/bin目录下)

1.生成签名keystore:

确保电脑上安装了JDK,因为我们将使用JDK自带的创建和管理数字证书的工具Keytool。在命令行下输入如下命令:

keytool-genkey-v-keystore app.keystore-alias alias_name-keyalg RSA-validity 20000

-alias后面跟的是别名这里是alias_name

-keyalg是加密方式这里是RSA

-validity是有效期这里是20000

-keystore就是要生成的keystore的名称这里是app.keystore

然后按回车键

按回车后首先会提示你输入的密码:这个在签名时要用的,要记住

然后会再确认你的密码。

之后会依次叫你输入姓名、组织单位、组织名称、城市区域、省份名称、国家代码(CN)等。

2.签名:

jarsigner-verbose-keystore app.keystore-signedjar app_signed.apk app.apk alias_name

-keystore: keystore的名称

-signedjar app_signed.apk:指定签名后生成的APK名称

app.apk:目标APK

然后按回车:会要求输入刚才设置的密码,输入后按回车就开始签名了。

3.查看签名:

jarsigner-verify app_signed.apk

查看是否签名,如果已经签名会打印"jar verified".

jarsigner-verify-verbose-certs app_signed.apk

查看签名详细信息。

4.通过zipalign工具进行优化apk(android自带的工具,./build/tools/zipalign)

zipalign-v 4 app_signed.apk androidres.apk对apk优化

zipalign-c-v 4 androidres.apk查看apk是否经过优化

2.使用eclipse ADT工具签名

在Package Explorer窗口,右键,选择Android Tools--->Export Signed Application Package然后按照提示一步一步,生成已签名的apk。通过eclipse也可以导出未签名的APK文件。

注:需要输入两次密码,第一次是私钥密码,第二次时私钥别名的密码。

3.eclipse在debug模式下自动签名(无须手动配置):

在debug模式下用eclipse的ADT为android签名,只要应用程序在eclipse下开发,系统就会自动给apk签名和优化。

在Eclipse中Windows> Preferences> Android> Build可以看到你keysotre的位置;

四、生成Android系统签名

上面讲的Android数字签名大多是与Android APK相关,做CTS认证时,需要用到Android系统签名。为什么需要给Android系统签个名才能进行CTS认证呢?原来我们通过make-j4编译出来的system.img使用的是test key,这种类型的key只适用于开发阶段,而且这种秘钥是公开的,谁都可以使用。当发布一款android产品,就需要另外给整个系统签个名,防止被别人盗用。这种系统就是release版本的Android系统。

1、生成加密key文件

要对Android系统进行签名,需要生成四种类型的key文件。

a)releasekey(testkey)

b)media

c)shared

d)platform

1)进入/android_src/development/tools目录。

2)使用make_key工具生成签名文件。需要分别生成 releasekey,media,shared,platform。

./make_key releasekey'/C=CN/ST=JiangSu/L=NanJing/O=pany/OU=Department/CN=Your Name/emailAddress=YourE-mailAddress'(系统将会提示输入针对各种key的密码,按照提示输入即可)

将会生成 releasekey.pk8和 releasekey.x509.pem文件,其中*.pk8是生成的私钥,而*.x509.pem是公钥,生成时两者是成对出现的.

注:如果出现 openssl: relocation error:openssl: symbol...尝试用 sudo执行命令,问题解决了!

2.回到根目录android_src。

命令执行的时候都最好在工程的根目录下执行,要不然脚本用到的某些文件找不到的。

3.编译系统

make-j4 PRODUCT-generic-user dist

其中generic表示生成的TARGET_PRODUCT类型为generic,

user代表TARGET_BUILD_VARIANT为user版本。

编译完成之后回在android_src/dist/目录内生成个product_generic-user_files开头的zip文件.这就是我们需要进行签名的文件系统.

4.开始签名

./build/tools/releasetools/sign_target_files_apks-d key_directory/ out/dist/product_modul-target_files.zip out/dist/signed_target_files.zip

通过sign_target_files_apks脚本,完成android系统的签名工作.

key_directory/表示key所在的目录。

out/dist/product_modul-target_files.zip源文件。

out/dist/signed_target_files.zip生成签名的目标文件。

可能会出现:

ERROR: no key specified for:

CalendarWidget.apk

Contacts_yellowpage.apk

SnsAppMain.apk

这表示,签名并没有成功,原因是由于有些apk程序已经签过名了或者找不到对应的key.这需要我们对apk设置过滤,不对上面的应用进行签名.方法如下:

通过参数"-e="来过滤这些应用.

./build/tools/releasetools/sign_target_files_apks-d key_directory/-e CalendarWidget.apk=-e Contacts_yellowpage.apk=-e SnsAppMain.apk=-e out/dist/product_modul-target_files.zip out/dist/signed_target_files.zip

输入该命令时会提示输入key的密码,会出现四次密码输入提示。分别为四种类型的key的密码。

5.生成image文件

./build/tools/releasetools/img_from_target_files out/dist/signed-target-files.zip signed-img.zip

用img_from_target_files命令对生成的igned-target-files.zip文件进行打包,signed-img.zip包含了boot.img,userdate.img,system.img文件等.

6.通过fastboot下载signed-img.zip文件

fastboot update signed-img.zip

通过fastboot就可以把签了名的系统文件烧到手机上了。

标签:作文经典上一篇:梦见自己做饭什么意思梦见别人做饭什么意思下一篇:成语接龙民凋民什么凋什么成语接龙

这段JAVA代码什么意思

javax.crypto.Cipher类提供加密和解密功能,该类是JCE框架的核心。

一,与所有的引擎类一样,可以通过调用Cipher类中的getInstance静态工厂方法得到Cipher对象。

public static Cipher getInstance(String transformation);

public static Cipher getInstance(String transformation,String provider);

参数transformation是一个字符串,它描述了由指定输入产生输出所进行的操作或操作集合。

参数transformation总是包含密码学算法名称,比如DES,也可以在后面包含模式和填充方式。

参数transformation可以是下列两种形式之一:

“algorithm/mode/padding”

“algorithm”

例如下面的例子就是有效的transformation形式:

"DES/CBC/PKCS5Padding"

"DES"

如果没有指定模式或填充方式,就使用特定提供者指定的默认模式或默认填充方式。例如,SunJCE提供者使用ECB作为DES、DES-EDE和 Blowfish等Cipher的默认模式,并使用PKCS5Padding作为它们默认的填充方案。这意味着在SunJCE提供者中,下列形式的声明是等价的:Cipher c1=Cipher.getInstance("DES/ECB/PKCS5Padding");

Cipher c1=Cipher.getInstance("DES");

当以流加密方式请求以块划分的cipher时,可以在模式名后面跟上一次运算需要操作的bit数目,例如采用"DES/CFB8/NoPadding"和"DES/OFB32/PKCS5Padding"形式的transformation参数。如果没有指定数目,则使用提供者指定的默认值(例如 SunJCE提供者使用的默认值是64bit)。

getInstance工厂方法返回的对象没有进行初始化,因此在使用前必须进行初始化。

通过getInstance得到的Cipher对象必须使用下列四个模式之一进行初始化,这四个模式在Cipher类中被定义为final integer常数,我们可以使用符号名来引用这些模式:

ENCRYPT_MODE,加密数据

DECRYPT_MODE,解密数据

WRAP_MODE,将一个Key封装成字节,可以用来进行安全传输

UNWRAP_MODE,将前述已封装的密钥解开成java.security.Key对象

每个Cipher初始化方法使用一个模式参数opmod,并用此模式初始化Cipher对象。此外还有其他参数,包括密钥key、包含密钥的证书certificate、算法参数params和随机源random。

我们可以调用以下的init方法之一来初始化Cipher对象:

public void init(int opmod,Key key);

public void init(int opmod,Certificate certificate);

public void init(int opmod,Key key,SecureRandom random);

public void init(int opmod,Certificate certificate,SecureRandom random);

public void init(int opmod,Key key,AlgorithmParameterSpec params);

public void init(int opmod,Key key,AlgorithmParameterSpec params,SecureRandom random);

public void init(int opmod,Key key,AlgorithmParameters params);

public void init(int opmod,Key key,AlgorithmParameters params,SecureRandom random);

必须指出的是,加密和解密必须使用相同的参数。当Cipher对象被初始化时,它将失去以前得到的所有状态。即,初始化Cipher对象与新建一个Cipher实例然后将它初始化是等价的。

二,可以调用以下的doFinal()方法之一完成单步的加密或解密数据:

public byte[] doFinal(byte[] input);

public byte[] doFinal(byte[] input,int inputOffset,int inputLen);

public int doFinal(byte[] input,int inputOffset,int inputLen,byte[] output);

public int doFinal(byte[] input,int inputOffset,int inputLen,byte[] output,int outputOffset);

在多步加密或解密数据时,首先需要一次或多次调用update方法,用以提供加密或解密的所有数据:

public byte[] update(byte[] input);

public byte[] update(byte[] input,int inputOffset,int inputLen);

public int update(byte[] input,int inputOffset,int inputLen,byte[] output);

public int update(byte[] input,int inputOffset,int inputLen,byte[] output,int outputOffset);

如果还有输入数据,多步操作可以使用前面提到的doFinal方法之一结束。如果没有数据,多步操作可以使用下面的doFinal方法之一结束:

public byte[] doFinal();

public int doFinal(byte[] output,int outputOffset);

如果在transformation参数部分指定了padding或unpadding方式,则所有的doFinal方法都要注意所用的padding或unpadding方式。

调用doFinal方法将会重置Cipher对象到使用init进行初始化时的状态,就是说,Cipher对象被重置,使得可以进行更多数据的加密或解密,至于这两种模式,可以在调用init时进行指定。

三,包裹wrap密钥必须先使用WRAP_MODE初始化Cipher对象,然后调用以下方法:

public final byte[] wrap(Key key);

如果将调用wrap方法的结果(wrap后的密钥字节)提供给解包裹unwrap的人使用,必须给接收者发送以下额外信息:

(1)密钥算法名称:

密钥算法名称可以调用Key接口提供的getAlgorithm方法得到:

public String getAlgorithm();

(2)被包裹密钥的类型(Cipher.SECRET_KEY,Cipher.PRIVATE_KEY,Cipher.PUBLIC_KEY)

sourcelink: http://bbs.sdu.edu.cn/pc/pccon.php?id=1292&nid=41716&order=&tid=

为了对调用wrap方法返回的字节进行解包,必须先使用UNWRAP_MODE模式初始化Cipher对象,然后调用以下方法:

public final Key unwrap(byte[] wrappedKey,String wrappedKeyAlgorithm,int wrappedKeyType));

其中,参数wrappedKey是调用wrap方法返回的字节,参数wrappedKeyAlgorithm是用来包裹密钥的算法,参数 wrappedKeyType是被包裹密钥的类型,该类型必须是Cipher.SECRET_KEY,Cipher.PRIVATE_KEY, Cipher.PUBLIC_KEY三者之一。

四,SunJCE提供者实现的cipher算法使用如下参数:

(1)采用CBC、CFB、OFB、PCBC模式的DES、DES-EDE和Blowfish算法。,它们使用初始化向量IV作为参数。可以使用javax.crypto.spec.IvParameterSpec类并使用给定的IV参数来初始化Cipher对象。

(2)PBEWithMD5AndDES使用的参数是一个由盐值和迭代次数组成的参数集合。可以使用javax.crypto.spec.PBEParameterSpec类并利用给定盐值和迭代次数来初始化Cipher对象。

注意:如果使用SealedObject类,就不必为解密运算参数的传递和保存担心。这个类在加密对象内容中附带了密封和加密的参数,可以使用相同的参数对其进行解封和解密。

Cipher中的某些update和doFinal方法允许调用者指定加密或解密数据的输出缓存。此时,保证指定的缓存足够大以容纳加密或解密运算的结果是非常重要的

java rsa sha1 是什么意思的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于安卓签名是什么 安卓签名是sha1吗、java rsa sha1 是什么意思的信息别忘了在本站进行查找哦。

java注释快捷键是什么?java注释多行##快捷键是什么为什么要继承 java?在java中,什么叫继承为什么要有继承