这几章主要介绍了一些为什么要加密,加密的历史原因以及演变过程,并介绍了几种常见的加密算法,画出了对称与非对称加密在实际应用中的思维导图。
(了解到加密技术分为对称加密,非对称加密,单向加密(散列加密))
(一般单向加密用于提供数据完整性的校验,使用到的算法有MD5,SHA1等Hash算法),(消息认证,鉴权等多用非对称加密算法,通过使用数字证书,公钥私钥来实现)
另外,JCA 是提供基础的加密框架,类似于一个工厂,生产密钥产生器,数字证书,签名等基础设施。JCE 是JCA的扩展,也就是加工厂,拿到JCA的基础设施后,放入一些乱七八糟的算法,让产出的产品具有保密性。JSSE 是负责在网络传输中加密的,是基于SSL的。
JCE 最后封装成了一套接口,作为安全提供者接口。据说,它的精髓就是,引擎和算法。一个算法是一个引擎的具体实现,例如(provider + rsa算法)
↑ 这里面使用到了提供者模式。↑ 即,基础功能提供者只需要关注提供哪种服务(加密,解密,or anyone else),不需要关心算法是否又推层出新了。
(据书里说,java.security.Provider 和 java.security.Security 这两个类是JCE的核心,于是我去翻了翻API)……基本看不到什么有意思的。
于是人书里继续说了,其实真的要实现加密解密,还要用javax.crypto里的功能。好吧,这样就和我见过的匹配上了。所以上面说的核心只是说掌握如何操作,这里的核心是干实事,基层核心。
Ⅱ 如何使用java进行sha1加密
使用下面的语句即可:
digestutils.shahex(要加密的字符);加密参数最好用字节数组,毕竟sha1算法是使用字节为单位进行运算的,字符串转字节还与字符编码有关。
Ⅲ java 3des和sha1的区别
公开密钥加密(英语:public-key cryptography,又译为公开密钥加密),也称为非对称加密(asymmetric cryptography),一种密码学算法类型,在这种密码学方法中,需要一对密钥,一个是私人密钥,另一个则是公开密钥。这两个密钥是数学相关,用某用户密钥加密后所得的信息,只能用该用户的解密密钥才能解密。如果知道了其中一个,并不能计算出另外一个。因此如果公开了一对密钥中的一个,并不会危害到另外一个的秘密性质。称公开的密钥为公钥;不公开的密钥为私钥。
Ⅳ 用java语言SHA1加密算法随即显示数字,运行时显示错误java.lang.NullPointerException: String is null
无需各个都看,第一行已经提示了…无指向,string 不能为空…仔细瞧瞧各个参数设置是否正确吧…
Ⅳ 请求Java的SHA1加密算法转换为NET怎么写的
首先引用这个命名空间usingSystem.Security.Cryptography;//建立SHA1对象SHA1sha=newSHA1CryptoServiceProvider();//将mystr转换成byte[]ASCIIEncodingenc=newASCIIEncoding();byte[]dataToHash=enc.GetBytes(mystr);//Hash运算byte[]dataHashed=SHA1.ComputeHash(dataToHash);//将运算结果转换成stringstringhash=BitConverter.ToString(dataHashed).Replace("-","");returnhash;
Ⅵ java sha1与objc sha1加密
检查一下 digesta值的编码是否于objc的编码相同
Ⅶ 用java程序进行sha1加密,怎么弄
publicclassSha1{
/**
*SHA1安全加密算法
*@parammaps参数key-valuemap集合
*@return
*@throwsDigestException
*/
publicstaticStringSHA1(Map<String,Object>maps)throwsDigestException{
//获取信息摘要-参数字典排序后字符串
Stringdecrypt=getOrderByLexicographic(maps);
try{
//指定sha1算法
MessageDigestdigest=MessageDigest.getInstance("SHA-1");
digest.update(decrypt.getBytes());
//获取字节数组
bytemessageDigest[]=digest.digest();
//CreateHexString
StringBufferhexString=newStringBuffer();
//字节数组转换为十六进制数
for(inti=0;i<messageDigest.length;i++){
StringshaHex=Integer.toHexString(messageDigest[i]&0xFF);
if(shaHex.length()<2){
hexString.append(0);
}
hexString.append(shaHex);
}
returnhexString.toString().toUpperCase();
}catch(NoSuchAlgorithmExceptione){
e.printStackTrace();
thrownewDigestException("签名错误!");
}
}
/**
*获取参数的字典排序
*@parammaps参数key-valuemap集合
*@returnString排序后的字符串
*/
(Map<String,Object>maps){
returnsplitParams(lexicographicOrder(getParamsName(maps)),maps);
}
/**
*获取参数名称key
*@parammaps参数key-valuemap集合
*@return
*/
privatestaticList<String>getParamsName(Map<String,Object>maps){
List<String>paramNames=newArrayList<String>();
for(Map.Entry<String,Object>entry:maps.entrySet()){
paramNames.add(entry.getKey());
}
returnparamNames;
}
/**
*参数名称按字典排序
*@paramparamNames参数名称List集合
*@return排序后的参数名称List集合
*/
privatestaticList<String>lexicographicOrder(List<String>paramNames){
Collections.sort(paramNames);
returnparamNames;
}
/**
*拼接排序好的参数名称和参数值
*@paramparamNames排序后的参数名称集合
*@parammaps参数key-valuemap集合
*@returnString拼接后的字符串
*/
(List<String>paramNames,Map<String,Object>maps){
StringBuilderparamStr=newStringBuilder();
for(StringparamName:paramNames){
paramStr.append(paramName);
for(Map.Entry<String,Object>entry:maps.entrySet()){
if(paramName.equals(entry.getKey())){
paramStr.append(String.valueOf(entry.getValue()));
}
}
}
returnparamStr.toString();
}
Ⅷ java的sha1加密和object-c的sha1加密后的值不一样,谁能帮我解决一下。多谢了
结果是一样的, 但是你多搞了一点: java你是用Base64编码成字符串, 而ObjC你是直接用16进制输出的, 你java上不Base64编码, 也输出成16进制, 就一样了;
Ⅸ (java加密解密)如何实现JCE接口的各种算法
关于如何去实现Provider,官方文档中有详细的说明。
请参照:http://download.oracle.com/javase/6/docs/technotes/guides/security/crypto/HowToImplAProvider.html#Steps
Ⅹ java 怎样实现 64位的md5加密算法
直接引入“commons-codec-1.10.jar”这个java包,然后调用相应方法即可
比如我们可以写一个方法类,把常用的方法都写进去:
publicclassEncryptionUtil{
/**
*Base64encode
**/
(Stringdata){
returnBase64.encodeBase64String(data.getBytes());
}
/**
*Base64decode
*@
**/
(Stringdata){
returnnewString(Base64.decodeBase64(data.getBytes()),"utf-8");
}
/**
*md5
**/
publicstaticStringmd5Hex(Stringdata){
returnDigestUtils.md5Hex(data);
}
/**
*sha1
**/
publicstaticStringsha1Hex(Stringdata){
returnDigestUtils.sha1Hex(data);
}
/**
*sha256
**/
publicstaticStringsha256Hex(Stringdata){
returnDigestUtils.sha256Hex(data);
}
}
(PS:纯手打,望采纳)