mysql 密码文件改成密文_需求:实现数据库密码通过密文的方式存储在配置文件中 | 学步园...

需求:实现数据库密码通过密文的方式存储在配置文件中

配置文件:evoucher.conf【可以是任意自定义格式结尾的配置文件】格式 是以  Key:Value存在的。

例如如下:

# evoucher.database 数据库配置

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

# 'ORACLE'ORACLE数据库;'POSTGRES'postgreSql数据库;'DB2'DB2数据库;'SYBASE'sybase数据库;'UPDB'upRight数据库;'KB'kingBase数据库

evoucher.model.DataBaseService=ORACLE

#设置数据库用户名

evoucher.database.user=assp_pbc_1231

#设置数据库密码

evoucher.database.password=1

#设置数据库ip

evoucher.database.ip=192.168.1.241

#设置数据库端口

evoucher.database.port=1521

#数据库实例名oracle是实例名、postgres是数据库名

evoucher.database.databasename=orcl

##################oracle数据库URL配置 (当使用oracle数据库时,配置了URL则优先使用根据url配置的数据库,其他数据库无需配置)

##################如 jdbc:oracle:thin:@127.0.0.1:1521:orcl

evoucher.oracle.url=

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

# evoucher.service.sign 签名服务配置

配置文件操作类:PropertiesHander.java

里面几个重要的方法:

saveNewPro:更新新的配置  更新配置

*   1.将更改后的配置文件保存在新的properties内2.初始化参数 将更改后的参数进行初始化3.更新缓存内的内容

getEVConfValue(String key)

setEVConfValue(HashMap map)

Properties getProByCustomPath(String customPath,String fileName) {        //获取自定义包路径的配置文件

List readConfig(String fileURL)                        //读取配置文件  保留里面的注释信息

源文件如下:

/**

* 配置文件操作类

*

* @author leiruiheng

*

*/

public class PropertiesHander {

private static final Logger logger = Logger

.getLogger(PropertiesHander.class);

private static HashMap File_MAPPINGS = new HashMap();

private static Properties evoucherConfPro = PropertiesHander

.getProByCustomPath("/", BIZConstant.FILE_NAME_EVOUCHER_CONF);

static {

// 注册类字段与配置字段的映射关系

File_MAPPINGS.put("M_SIGN_SERVICE", "evoucher.model.SignService");

File_MAPPINGS.put("M_MESSAGE_SERVICE", "evoucher.model.MessageService");

File_MAPPINGS.put("M_ESTAMP_SERVICE", "evoucher.model.EStampService");

File_MAPPINGS.put("M_DATABASE_SERVICE",

"evoucher.model.DataBaseService");

File_MAPPINGS.put("M_CALL_BACK_PARAMETER",

"evoucher.service.callback.address");

File_MAPPINGS.put("M_REQUEST_NOTIFY", "evoucher.service.requestData.address");

File_MAPPINGS.put("M_CALL_BACK_THREAD_COUNT", "evoucher.service.callback.thread.count");

File_MAPPINGS.put("S_SIGN_SERVICE", "evoucher.switch.SignService");

File_MAPPINGS

.put("S_MESSAGE_SERVICE", "evoucher.switch.MessageService");

File_MAPPINGS.put("S_ESTAMP_SERVICE", "evoucher.switch.EStampService");

File_MAPPINGS.put("S_ESTAMP_ALLSIGN", "evoucher.switch.EStampAllSign");

File_MAPPINGS.put("S_ESTAMP_FUND", "evoucher.switch.EStampFund");

File_MAPPINGS.put("S_RECEIVE_VIERFY", "evoucher.switch.ReceiveVerfy");

File_MAPPINGS.put("S_READ_IS_RETURN", "evoucher.switch.IsReturn");

File_MAPPINGS.put("S_CHECK_IS", "evoucher.switch.VoucherFieldCheck");

File_MAPPINGS.put("S_CALL_BACK_FUNCTION",

"evoucher.switch.CallBackFuction");

File_MAPPINGS.put("S_ERROR_MSG_MODEL_FLAG", "evoucher.switch.ErrMsgModeFlag");

File_MAPPINGS.put("S_RECEIVE_MSG_REQUESTDATA_FLAG", "evoucher.switch.requestData");

File_MAPPINGS.put("S_RECEIVE_MSG_SENDDATA_FLAG", "evoucher.switch.sendData");

File_MAPPINGS.put("S_RECEIVE_MSG_SENDDATA_CALLBACK_FLAG", "evoucher.switch.sendData.CallBackFuncton");

File_MAPPINGS.put("S_AUTHENTICATEDUSERS", "evoucher.switch.AuthenticatedUsers");

File_MAPPINGS.put("S_TIMElOG_TEST", "evoucher.switch.TimeLog");

/** 凭证库服务版本号 */

File_MAPPINGS.put("EVOUCHER_SERVICE_VERSION", "evoucher.service.version");

//原文篡改编码

File_MAPPINGS.put("M_EVOUCHER_VERFIY_SIGN_CODE", "evoucher.verfiySignStamp.code");

//IP白名单控制

File_MAPPINGS.put("M_EVOUCHER_IP_WHITELIST_SERVER", "evoucher.ip.whiteList.server");

File_MAPPINGS.put("M_EVOUCHER_IP_WHITELIST_OCX", "evoucher.ip.whiteList.ocx");

File_MAPPINGS.put("S_CHECK_VOUCHERXMLFORXFIELD", "evoucher.switch.checkVoucherXmlForXField");

File_MAPPINGS.put("M_READ_VOUCHER_COUNT", "evoucher.service.read.voucher.count");

//校验内部凭证不能修改非空字段开关

File_MAPPINGS.put("S_CHECK_CANMODIFYNONEMPTYFIELDS","evoucher.switch.canModifyNonemptyFields");

//自动升级数据库开关

File_MAPPINGS.put("S_AUTO_UPDATEDB","evoucher.switch.autoUpdateDB");

}

/**

* 将更改后的参数保存在新的properties文件内

* @return null

* */

public static void saveNewPro(){

String fileUrl = PropertiesHander.class.getResource("/evoucher.conf").toString();

fileUrl = fileUrl.replace("file:","");

try {

//InputStream is1=PropertiesHander.class.getClassLoader().getResourceAsStream("evoucher.conf");

InputStream is = new FileInputStream(new File(fileUrl));

evoucherConfPro.clear();

evoucherConfPro.load(is);

} catch (IOException e) {

logger.error("文件加载异常", e);

}

}

public static String getEVConfValue(String key) {

if(File_MAPPINGS.containsKey(key))

key=File_MAPPINGS.get(key);

return evoucherConfPro.getProperty(key);

}

public static void setEVConfValue(HashMap map){

OutputStream out = null;

OutputStreamWriter outFileWriter = null;

BufferedWriter br = null;

try {

String s=PropertiesHander.class.getResource("/evoucher.conf").toString();

s=s.replace("file:","");

List list = PropertiesHander.readConfig(s);

out = new FileOutputStream(s);

outFileWriter = new OutputStreamWriter(out, "utf-8");

br = new BufferedWriter(outFileWriter);

for(String str : list){

if(str.contains("=")){

String[] array = str.split("=");

if(map.containsKey(array[0])){

str = array[0] + "=" + map.get(array[0]).trim();

}

}

br.write(str);

br.newLine();

}

} catch (Exception e) {

logger.error(e);

} finally{

try {

if(br != null){

br.close();

}

if(outFileWriter != null){

outFileWriter.close();

}

if(out != null){

out.close();

}

} catch (IOException e) {

logger.error(e);

}

}

}

/**

* 获取自定义包路径的配置文件

*

* @param customPath

* 自定义路径

* @param fileName

* 文件名

* @return

*/

public static Properties getProByCustomPath(String customPath,

String fileName) {

InputStream in = null;

Properties prop = new Properties();

try {

in = PropertiesHander.class.getResourceAsStream(customPath

+ fileName);

prop.load(in);

} catch (Exception e) {

throw new EVoucherException(ExceptionConstant.EVS601 + "获取文件["

+ fileName + "]失败", e);

} finally {

if (in != null)

try {

in.close();

} catch (IOException e) {

logger.warn("关闭流失败", e);

}

}

return prop;

}

/**

* 读取配置文件 保留里面的注释信息

* @param fileURL

* @author LY 2014-9-23

*/

private static List readConfig(String fileURL) {

List propCont = new ArrayList();

FileInputStream fis = null;

InputStreamReader isr = null;

BufferedReader bufferedreader = null;

try {

fis = new FileInputStream(fileURL);

isr = new InputStreamReader(fis, "utf-8");

bufferedreader = new BufferedReader(isr);

String temp = "";

while ((temp = bufferedreader.readLine()) != null) {

propCont.add(temp);

}

} catch (Exception e) {

logger.error(e);

} finally{

try {

if(bufferedreader != null){

bufferedreader.close();

}

if(isr != null){

isr.close();

}

if(fis != null){

fis.close();

}

} catch (IOException e) {

logger.error(e);

}

}

return propCont;

}

}

在类加载获取密码过程中:

//对数据库的密码进行加密处理

String pass=dealPassword(password);

方法体如下:

/**

* 处理密码 dealPassword 如果是明文 则加密 返回原密码

* 如果是密文 直接解密 返回解密后密码

* */

//对获取的密码进行解密

@SuppressWarnings("unchecked")

public String dealPassword(String password){

Des desObj=new Des();

String key1 = "lyn";

String key2 = "lyn";

String key3 = "lyn";

HashMap map=new HashMap();

if(password.length()<32){

//将字符串的密码长度增加至32位

String s="0000_"+password;

//对原文进行加密

String passWord = desObj.strEnc(s, key1, key2, key3);

//将加密后的参数传给配置文件更改配置文件中的信息 读取配置文件的信息

Properties evoucherPro = new Properties();

InputStream is=PropertiesHander.class.getClassLoader().getResourceAsStream("evoucher.conf");

try {

evoucherPro.load(is);

} catch (IOException e) {

// TODO Auto-generated catch block

logger.error("对密码加密时加载配置文件异常", e);

}

//将配置新的密码更新到配置文件中

evoucherPro.setProperty("evoucher.database.password", passWord);

//更新配置文件

Enumeration enmObject = evoucherPro.keys();

//对每一个主键信息进行检索处理,跟传入的返回值信息是否有相同的地方(如果有相同的地方,取出主键信息的属性,传回给返回信息)

while(enmObject.hasMoreElements()){

String Key = (String)enmObject.nextElement();

String Value = evoucherPro.getProperty(Key);

map.put(Key, Value);

}

PropertiesHander.setEVConfValue(map);

return password;

}

//解密

String newPassword1=desObj.strDec(password, key1, key2, key3);

String newPassword=newPassword1.substring(5);

return newPassword;

}

这里面用到了DES加密

DES设计到Java版本和.js版本。参考资料如下源代码:http://download.csdn.net/detail/itjavawfc/8375329

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值