package com.cube.limail.util;
站在用戶(hù)的角度思考問(wèn)題,與客戶(hù)深入溝通,找到增城網(wǎng)站設(shè)計(jì)與增城網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶(hù)體驗(yàn)好的作品,建站類(lèi)型包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋增城地區(qū)。
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;/**
* 加密解密類(lèi)
*/
public class Eryptogram
{
private static String Algorithm ="DES";
private String key="CB7A92E3D3491964";
//定義 加密算法,可用 DES,DESede,Blowfish
static boolean debug = false ;
/**
* 構(gòu)造子注解.
*/
public Eryptogram ()
{
} /**
* 生成密鑰
* @return byte[] 返回生成的密鑰
* @throws exception 扔出異常.
*/
public static byte [] getSecretKey () throws Exception
{
KeyGenerator keygen = KeyGenerator.getInstance (Algorithm );
SecretKey deskey = keygen.generateKey ();
System.out.println ("生成密鑰:"+bytesToHexString (deskey.getEncoded ()));
if (debug ) System.out.println ("生成密鑰:"+bytesToHexString (deskey.getEncoded ()));
return deskey.getEncoded ();
} /**
* 將指定的數(shù)據(jù)根據(jù)提供的密鑰進(jìn)行加密
* @param input 需要加密的數(shù)據(jù)
* @param key 密鑰
* @return byte[] 加密后的數(shù)據(jù)
* @throws Exception
*/
public static byte [] encryptData (byte [] input ,byte [] key ) throws Exception
{
SecretKey deskey = new javax.crypto.spec.SecretKeySpec (key ,Algorithm );
if (debug )
{
System.out.println ("加密前的二進(jìn)串:"+byte2hex (input ));
System.out.println ("加密前的字符串:"+new String (input ));
} Cipher c1 = Cipher.getInstance (Algorithm );
c1.init (Cipher.ENCRYPT_MODE ,deskey );
byte [] cipherByte =c1.doFinal (input );
if (debug ) System.out.println ("加密后的二進(jìn)串:"+byte2hex (cipherByte ));
return cipherByte ;
} /**
* 將給定的已加密的數(shù)據(jù)通過(guò)指定的密鑰進(jìn)行解密
* @param input 待解密的數(shù)據(jù)
* @param key 密鑰
* @return byte[] 解密后的數(shù)據(jù)
* @throws Exception
*/
public static byte [] decryptData (byte [] input ,byte [] key ) throws Exception
{
SecretKey deskey = new javax.crypto.spec.SecretKeySpec (key ,Algorithm );
if (debug ) System.out.println ("解密前的信息:"+byte2hex (input ));
Cipher c1 = Cipher.getInstance (Algorithm );
c1.init (Cipher.DECRYPT_MODE ,deskey );
byte [] clearByte =c1.doFinal (input );
if (debug )
{
System.out.println ("解密后的二進(jìn)串:"+byte2hex (clearByte ));
System.out.println ("解密后的字符串:"+(new String (clearByte )));
} return clearByte ;
} /**
* 字節(jié)碼轉(zhuǎn)換成16進(jìn)制字符串
* @param byte[] b 輸入要轉(zhuǎn)換的字節(jié)碼
* @return String 返回轉(zhuǎn)換后的16進(jìn)制字符串
*/
public static String byte2hex (byte [] b )
{
String hs ="";
String stmp ="";
for (int n =0 ;n b.length ;n ++)
{
stmp =(java.lang.Integer.toHexString (b [n ] 0XFF ));
if (stmp.length ()==1 ) hs =hs +"0"+stmp ;
else hs =hs +stmp ;
if (n b.length -1 ) hs =hs +":";
} return hs.toUpperCase ();
}
/**
* 字符串轉(zhuǎn)成字節(jié)數(shù)組.
* @param hex 要轉(zhuǎn)化的字符串.
* @return byte[] 返回轉(zhuǎn)化后的字符串.
*/
public static byte[] hexStringToByte(String hex) {
int len = (hex.length() / 2);
byte[] result = new byte[len];
char[] achar = hex.toCharArray();
for (int i = 0; i len; i++) {
int pos = i * 2;
result[i] = (byte) (toByte(achar[pos]) 4 | toByte(achar[pos + 1]));
}
return result;
}
private static byte toByte(char c) {
byte b = (byte) "0123456789ABCDEF".indexOf(c);
return b;
}
/**
* 字節(jié)數(shù)組轉(zhuǎn)成字符串.
* @param String 要轉(zhuǎn)化的字符串.
* @return 返回轉(zhuǎn)化后的字節(jié)數(shù)組.
*/
public static final String bytesToHexString(byte[] bArray) {
StringBuffer sb = new StringBuffer(bArray.length);
String sTemp;
for (int i = 0; i bArray.length; i++) {
sTemp = Integer.toHexString(0xFF bArray[i]);
if (sTemp.length() 2)
sb.append(0);
sb.append(sTemp.toUpperCase());
}
return sb.toString();
}
/**
* 從數(shù)據(jù)庫(kù)中獲取密鑰.
* @param deptid 企業(yè)id.
* @return 要返回的字節(jié)數(shù)組.
* @throws Exception 可能拋出的異常.
*/
public static byte[] getSecretKey(long deptid) throws Exception {
byte[] key=null;
String value=null;
//CommDao dao=new CommDao();
// List list=dao.getRecordList("from Key k where k.deptid="+deptid);
//if(list.size()0){
//value=((com.csc.sale.bean.Key)list.get(0)).getKey();
value = "CB7A92E3D3491964";
key=hexStringToByte(value);
//}
if (debug)
System.out.println("密鑰:" + value);
return key;
}
public String encryptData2(String data) {
String en = null;
try {
byte[] key=hexStringToByte(this.key);
en = bytesToHexString(encryptData(data.getBytes(),key));
} catch (Exception e) {
e.printStackTrace();
}
return en;
}
public String decryptData2(String data) {
String de = null;
try {
byte[] key=hexStringToByte(this.key);
de = new String(decryptData(hexStringToByte(data),key));
} catch (Exception e) {
e.printStackTrace();
}
return de;
}
} 加密使用: byte[] key=Eryptogram.getSecretKey(deptid); //獲得鑰匙(字節(jié)數(shù)組)
byte[] tmp=Eryptogram.encryptData(password.getBytes(), key); //傳入密碼和鑰匙,獲得加密后的字節(jié)數(shù)組的密碼
password=Eryptogram.bytesToHexString(tmp); //將字節(jié)數(shù)組轉(zhuǎn)化為字符串,獲得加密后的字符串密碼解密與之差不多
尚學(xué)堂回答:敏感數(shù)據(jù)(如信用卡號(hào)碼)、個(gè)人識(shí)別信息(如社會(huì)安全號(hào)碼)、醫(yī)療診斷和甚至非個(gè)人的敏感數(shù)據(jù)(例如公司財(cái)務(wù)信息和知識(shí)產(chǎn)權(quán))的曝光,是由于企業(yè)員工和外部人士濫用職權(quán)或工作失誤所致?!睌?shù)據(jù)脫敏技術(shù)的目是通過(guò)從客戶(hù)端隱藏敏感數(shù)據(jù),以防止這些數(shù)據(jù)的濫用。技術(shù)供應(yīng)商提供了多種數(shù)據(jù)脫敏技術(shù),例如用相似的字符替代一些字段;用屏蔽字符(例如,‘x’)替代字符;用虛擬的姓氏替代真正的姓氏,以及在數(shù)據(jù)庫(kù)數(shù)列中對(duì)數(shù)據(jù)進(jìn)行重組。數(shù)據(jù)脫敏也被稱(chēng)為數(shù)據(jù)混淆、數(shù)據(jù)保密、數(shù)據(jù)消毒、數(shù)據(jù)擾頻、數(shù)據(jù)匿名化和數(shù)據(jù)認(rèn)證。采用數(shù)據(jù)脫敏技術(shù),可以幫助企業(yè)提高安全性和保密等級(jí),以防止其數(shù)據(jù)被濫用。與此同時(shí),數(shù)據(jù)脫敏技術(shù)也可幫助企業(yè)滿(mǎn)足安全性的規(guī)范要求,以及由管理/審計(jì)機(jī)關(guān)所要求的隱私標(biāo)準(zhǔn)。
您好,提問(wèn)者:
1、重要信息進(jìn)行加密操作。
2、地址欄盡量采用post提交方式。
3、如果涉及多線程的話,可以使用Synchronized鎖。
下面例子:
public?class?Main{
public?static?void?main(String[]?args){
new?Thread(new?Suo()).start();
new?Thread(new?Suo()).start();
//開(kāi)啟兩個(gè)線程,加鎖之后數(shù)據(jù)就不會(huì)出錯(cuò)
}
}
class?Suo?implements?Runnable{
private?static?int?num?=?100;
public?synchronized?void?run(){
while(true){
if(num==0)
break;
else
System.out.println(num--);
}
}
}
輸入正確的手機(jī)號(hào),點(diǎn)擊獲取驗(yàn)證碼1,請(qǐng)求后臺(tái),隨機(jī)生成一個(gè)驗(yàn)證碼(位數(shù)自定)2,保存到數(shù)據(jù)庫(kù)中,同時(shí)發(fā)送短信(供應(yīng)商會(huì)提供接口)3,頁(yè)面上填寫(xiě)驗(yàn)證碼,請(qǐng)求到后臺(tái),查詢(xún)數(shù)據(jù)庫(kù),是否一致
能。java數(shù)據(jù)脫敏了是能還原的,需要管理數(shù)據(jù)的流入來(lái)還原脫敏前的數(shù)據(jù)。Java是一門(mén)面向?qū)ο蟮木幊陶Z(yǔ)言,不僅吸收了C語(yǔ)言的各種優(yōu)點(diǎn),還摒棄了C語(yǔ)言里難以理解的多繼承、指針等概念,因此Java語(yǔ)言具有功能強(qiáng)大和簡(jiǎn)單易用兩個(gè)特征。
數(shù)據(jù)脫敏是指對(duì)某些敏感信息通過(guò)脫敏規(guī)則進(jìn)行數(shù)據(jù)的變形,實(shí)現(xiàn)敏感隱私數(shù)據(jù)的可靠保護(hù)。在涉及客戶(hù)安全數(shù)據(jù)或者一些商業(yè)性敏感數(shù)據(jù)的情況下,在不違反系統(tǒng)規(guī)則條件下,對(duì)真實(shí)數(shù)據(jù)進(jìn)行改造并提供測(cè)試使用,如身份證號(hào)、手機(jī)號(hào)、卡號(hào)、客戶(hù)號(hào)等個(gè)人信息都需要進(jìn)行數(shù)據(jù)脫敏,數(shù)據(jù)庫(kù)安全技術(shù)之一。
比如我們現(xiàn)在有個(gè)user表,含有名字,性別,郵箱,電話號(hào)碼等字段,但是當(dāng)查看這些數(shù)據(jù)時(shí),我們又不希望這些數(shù)據(jù)被暴露,這時(shí)可以對(duì)這些數(shù)據(jù)進(jìn)行脫敏處理,當(dāng)然可以根據(jù)需要選擇哪些字段需要脫敏,然后再輸出,至于怎么選擇的,是另外一回事了。