
网络时代密码多。
密码,似乎成了人们与外界接触的通行证。
各种各样的密码如形形色色的“密钥”,助人打开现实世界和虚拟世界的一扇又一扇“门”。
从某种角度看,密码甚至控制了人们的生活。
密码在极大地保障了人们信息、财产安全的同时,也给人们的生活带来了不少烦恼。
随着现实世界和虚拟世界变得越来越复杂,密码难题日益突出:简单的不安全,复杂的记不住,弄混或忘记更是家常便饭。
如今,几乎每个人都有被密码纠缠、困扰的经历。
传统的身份认证方法除了使用用户名、密码等身份标识外,还采用钥匙、证件、磁卡、芯片卡等身份标识物品作为“密钥”,但这些“体外物”存在着容易丢失、遗忘、复制及被盗用等诸多不利因素。
为了让网络时代的身份验证过程变得更简单、更安全,消除人们因密码和各类身份标识物品而产生的种种烦恼,人们将“生物密钥”作为理想选择,各项生物识别技术应运而生。
人类的生物特征通常具有唯一性、可以测量或可自动识别和验证、遗传性或终身不变等特点,生物识别技术通过人类生物特征进行身份认证,通过计算机与光学、声学、生物传感器和生物统计学原理等高科技手段紧密结合,利用人体固有的生理特性(如手形、指纹、脸形、虹膜、视网膜、脉搏、耳郭、静脉、脑电波乃至基因等)和行为特征(如笔迹、声音、步态、按键力度等)来进行个人身份认证。
生物识别系统对生物特征进行取样,提取其唯一的特征并且转化成数字代码,再进一步将这些代码组成特征模板。
基于这些特征,人们已经发展了笔迹识别、手形识别、声音识别、步态识别、指纹识别、人脸识别、虹膜识别、静脉识别、脑电波识别、基因识别等多种生物识别技术。
所有生物识别技术的目标,就是让人们的身份具有唯一性,各种生物识别技术都必须能识别人们生理特性和行为特征中那些独一无二的“特点”。
生物识别认证技术较传统认证技术存在较大的优势。
人体特征具有人体所固有的不可复制的唯一性,这类“生物密钥”无法复制,不会失窃或被遗忘。
而且,生物识别技术产品均借助于现代计算机技术实现,很容易配合电脑和安全、监控、管理系统整合,实现自动化管理。
生物识别技术比传统的身份鉴定方法更安全、保密和方便。
“生物密钥”不仅防伪性能好,不易遗忘、伪造或被盗,而且可随身“携带”,随时随地可用。
生物识别是连通人工智能和现实世界的重要桥梁。
如今,在技术逐渐成熟及政策支持的背景下,生物识别正在成为人工智能产业率先爆发的领域。
各类“匪夷所思”的生物识别技术揭开神秘面纱,逐渐向民用方向靠拢,应用领域和覆盖面逐步扩大。
各种生物识别技术迅速发展,争奇斗艳,随着相关科技的突破性发展,将有越来越多的生物识别技术应用于实际生活,新技术、新模式、新场景将加快催化生物识别商业化进程。
重庆IT培训>
下面是RSA加密代码。
/
RSA算法,实现数据的加密解密。
@author ShaoJiang
/
public class RSAUtil {
private static Cipher cipher;
static{
try {
cipher = CiphergetInstance("RSA");
} catch (NoSuchAlgorithmException e) {
eprintStackTrace();
} catch (NoSuchPaddingException e) {
eprintStackTrace();
}
}
/
生成密钥对
@param filePath 生成密钥的路径
@return
/
public static Map<String,String> generateKeyPair(String filePath){
try {
KeyPairGenerator keyPairGen = KeyPairGeneratorgetInstance("RSA");
// 密钥位数
keyPairGeninitialize(1024);
// 密钥对
KeyPair keyPair = keyPairGengenerateKeyPair();
// 公钥
PublicKey publicKey = (RSAPublicKey) keyPairgetPublic();
// 私钥
PrivateKey privateKey = (RSAPrivateKey) keyPairgetPrivate();
//得到公钥字符串
String publicKeyString = getKeyString(publicKey);
//得到私钥字符串
String privateKeyString = getKeyString(privateKey);
FileWriter pubfw = new FileWriter(filePath+"/publicKeykeystore");
FileWriter prifw = new FileWriter(filePath+"/privateKeykeystore");
BufferedWriter pubbw = new BufferedWriter(pubfw);
BufferedWriter pribw = new BufferedWriter(prifw);
pubbwwrite(publicKeyString);
pribwwrite(privateKeyString);
pubbwflush();
pubbwclose();
pubfwclose();
pribwflush();
pribwclose();
prifwclose();
//将生成的密钥对返回
Map<String,String> map = new HashMap<String,String>();
mapput("publicKey",publicKeyString);
mapput("privateKey",privateKeyString);
return map;
} catch (Exception e) {
eprintStackTrace();
}
return null;
}
/
得到公钥
@param key
密钥字符串(经过base64编码)
@throws Exception
/
public static PublicKey getPublicKey(String key) throws Exception {
byte[] keyBytes;
keyBytes = (new BASE64Decoder())decodeBuffer(key);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactorygetInstance("RSA");
PublicKey publicKey = keyFactorygeneratePublic(keySpec);
return publicKey;
}
/
得到私钥
@param key
密钥字符串(经过base64编码)
@throws Exception
/
public static PrivateKey getPrivateKey(String key) throws Exception {
byte[] keyBytes;
keyBytes = (new BASE64Decoder())decodeBuffer(key);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactorygetInstance("RSA");
PrivateKey privateKey = keyFactorygeneratePrivate(keySpec);
return privateKey;
}
/
得到密钥字符串(经过base64编码)
@return
/
public static String getKeyString(Key key) throws Exception {
byte[] keyBytes = keygetEncoded();
String s = (new BASE64Encoder())encode(keyBytes);
return s;
}
/
使用公钥对明文进行加密,返回BASE64编码的字符串
@param publicKey
@param plainText
@return
/
public static String encrypt(PublicKey publicKey,String plainText){
try {
cipherinit(CipherENCRYPT_MODE, publicKey);
byte[] enBytes = cipherdoFinal(plainTextgetBytes());
return (new BASE64Encoder())encode(enBytes);
} catch (InvalidKeyException e) {
eprintStackTrace();
} catch (IllegalBlockSizeException e) {
eprintStackTrace();
} catch (BadPaddingException e) {
eprintStackTrace();
}
return null;
}
/
使用keystore对明文进行加密
@param publicKeystore 公钥文件路径
@param plainText 明文
@return
/
public static String encrypt(String publicKeystore,String plainText){
try {
FileReader fr = new FileReader(publicKeystore);
BufferedReader br = new BufferedReader(fr);
String publicKeyString="";
String str;
while((str=brreadLine())!=null){
publicKeyString+=str;
}
brclose();
frclose();
cipherinit(CipherENCRYPT_MODE,getPublicKey(publicKeyString));
byte[] enBytes = cipherdoFinal(plainTextgetBytes());
return (new BASE64Encoder())encode(enBytes);
} catch (InvalidKeyException e) {
eprintStackTrace();
} catch (IllegalBlockSizeException e) {
eprintStackTrace();
} catch (BadPaddingException e) {
eprintStackTrace();
} catch (Exception e) {
eprintStackTrace();
}
return null;
}
/
使用私钥对明文密文进行解密
@param privateKey
@param enStr
@return
/
public static String decrypt(PrivateKey privateKey,String enStr){
try {
cipherinit(CipherDECRYPT_MODE, privateKey);
byte[] deBytes = cipherdoFinal((new BASE64Decoder())decodeBuffer(enStr));
return new String(deBytes);
} catch (InvalidKeyException e) {
eprintStackTrace();
} catch (IllegalBlockSizeException e) {
eprintStackTrace();
} catch (BadPaddingException e) {
eprintStackTrace();
} catch (IOException e) {
eprintStackTrace();
}
return null;
}
/
使用keystore对密文进行解密
@param privateKeystore 私钥路径
@param enStr 密文
@return
/
public static String decrypt(String privateKeystore,String enStr){
try {
FileReader fr = new FileReader(privateKeystore);
BufferedReader br = new BufferedReader(fr);
String privateKeyString="";
String str;
while((str=brreadLine())!=null){
privateKeyString+=str;
}
brclose();
frclose();
cipherinit(CipherDECRYPT_MODE, getPrivateKey(privateKeyString));
byte[] deBytes = cipherdoFinal((new BASE64Decoder())decodeBuffer(enStr));
return new String(deBytes);
} catch (InvalidKeyException e) {
eprintStackTrace();
} catch (IllegalBlockSizeException e) {
eprintStackTrace();
} catch (BadPaddingException e) {
eprintStackTrace();
} catch (IOException e) {
eprintStackTrace();
} catch (Exception e) {
eprintStackTrace();
}
return null;
}
}
请把代码适当的贴上来,这样我没法解答的哦
-------------------------------
从上面的代码看,KeyStoregetInstance这个方法传入的参数好像不对,你确定是”PKCS12“?
你的代码还是不够多?能不能把main方法全贴出来,然后在适当的位置打个日志,方便问题定位?比如keyStore变量经过KeyStoregetInstance这个方法之后,对象有没有获取到?是不是null?最好用日志打出来
import javaxcryptoCipher;
import sunmiscBASE64Decoder;
import sunmiscBASE64Encoder;
import javaioFileInputStream;
import javaioFileOutputStream;
import javaioObjectInputStream;
import javaioObjectOutputStream;
import javasecurityKey;
import javasecurityKeyPair;
import javasecurityKeyPairGenerator;
import javasecuritySecureRandom;
public class RSA_Encrypt {
/ 指定加密算法为DESede /
private static String ALGORITHM = "RSA";
/ 指定key的大小 /
private static int KEYSIZE = 128;
/ 指定公钥存放文件 /
private static String PUBLIC_KEY_FILE = "PublicKey";
/ 指定私钥存放文件 /
private static String PRIVATE_KEY_FILE = "PrivateKey";
// private static String PUBLIC_KEY_FILE = "D://PublicKeya";
// private static String PRIVATE_KEY_FILE = "D://PrivateKeya";
/
生成密钥对
/
private static void generateKeyPair() throws Exception{
/ RSA算法要求有一个可信任的随机数源 /
SecureRandom sr = new SecureRandom();
/ 为RSA算法创建一个KeyPairGenerator对象 /
KeyPairGenerator kpg = KeyPairGeneratorgetInstance(ALGORITHM);
/ 利用上面的随机数据源初始化这个KeyPairGenerator对象 /
kpginitialize(KEYSIZE, sr);
/ 生成密匙对 /
KeyPair kp = kpggenerateKeyPair();
/ 得到公钥 /
Key publicKey = kpgetPublic();
/ 得到私钥 /
Key privateKey = kpgetPrivate();
/ 用对象流将生成的密钥写入文件 /
ObjectOutputStream oos1 = new ObjectOutputStream(new FileOutputStream(PUBLIC_KEY_FILE));
ObjectOutputStream oos2 = new ObjectOutputStream(new FileOutputStream(PRIVATE_KEY_FILE));
oos1writeObject(publicKey);
oos2writeObject(privateKey);
/ 清空缓存,关闭文件输出流 /
oos1close();
oos2close();
}
/
加密方法
source: 源数据
/
public static String encrypt(String source) throws Exception{
generateKeyPair();
/ 将文件中的公钥对象读出 /
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(PUBLIC_KEY_FILE));
Key key = (Key) oisreadObject();
oisclose();
/ 得到Cipher对象来实现对源数据的RSA加密 /
Cipher cipher = CiphergetInstance(ALGORITHM);
cipherinit(CipherENCRYPT_MODE, key);
byte[] b = sourcegetBytes();
/ 执行加密 *** 作 /
byte[] b1 = cipherdoFinal(b);
BASE64Encoder encoder = new BASE64Encoder();
return encoderencode(b1);
}
/
解密算法
cryptograph:密文
/
public static String decrypt(String cryptograph) throws Exception{
/ 将文件中的私钥对象读出 /
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(PRIVATE_KEY_FILE));
Key key = (Key) oisreadObject();
/ 得到Cipher对象对已用公钥加密的数据进行RSA解密 /
Cipher cipher = CiphergetInstance(ALGORITHM);
cipherinit(CipherDECRYPT_MODE, key);
BASE64Decoder decoder = new BASE64Decoder();
byte[] b1 = decoderdecodeBuffer(cryptograph);
/ 执行解密 *** 作 /
byte[] b = cipherdoFinal(b1);
return new String(b);
}
public static void main(String[] args) {
try {
String source = "Hello World!";//要加密的字符串
String cryptograph = encrypt(source);
Systemoutprintln(cryptograph);
String target = decrypt(cryptograph);//解密密文
Systemoutprintln(target);
} catch (Exception e) {
// TODO Auto-generated catch block
eprintStackTrace();
}//生成的密文
}
}
以上就是关于北大青鸟java培训:互联网安全秘钥种类全部的内容,包括:北大青鸟java培训:互联网安全秘钥种类、java加密解密中秘钥是什么东西、Java 第三方公钥 RSA加密求助等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)