`
xinyoulinglei
  • 浏览: 126538 次
社区版块
存档分类
最新评论

java学习的一点记录

    博客分类:
  • java
sql 
阅读更多
public class Tools
{

    static OMSLog log = Tools.getLog(Tools.class);

    /**
     * 文件内容集合 key :实际文件名称 value :Map<实际文件中的sheet名称, Map<表字段名称,
     * String[文件中列索引,文件中实际列名]>>
     */
    private static Map<String, Map<String, Map<String, String[]>>> fileMap =
        null;

    /**
     * 名称集合 <文件名称,<实际文件中的sheet名称,表名(常量)>
     */
    private static Map<String, Map<String, String>> fileNameMap = null;

    /**
     * 表名称对应的列集合 <表名,<列名,String[文件中列索引,文件中实际列名]>
     */
    private static Map<String, Map<String, String[]>> tableMap = null;

    /**
     * 数据表集合 key :表名(常量) value :map<列索引,列名>
     */
    private static Map<String, Map<Integer, String>> dataBaseMap = null;

    /**
     * 文件下的sheet名称集合(按读入顺序),导出
     */
    private static Map<String, List<String>> fileSheetNameMap = null;

    /**
     * 支持导出文件名称集合
     */
    private static List<String> exportFileNameList = null;

    /**
     * 插入
     */
    public final static int insert = 1;

    /**
     * 修改
     */
    public final static int update = 2;

    /**
     * 删除
     */
    public final static int delete = 3;

    /**
     * 文件语言版本
     */
    private static Map<String, String> fileLanguageVersion = null;

    /**
     * 取得日志
     *
     * @param clas
     * @return
     */
    public static OMSLog getLog(Class<?> clas)
    {
        String log4jName = getStringNoNull(System.getProperty("log4jname"));
        if (!"".equals(log4jName))
        {
            PropertyConfigurator.configure(Constant.PROJECT_DIR + "/config/"
                + log4jName + ".properties");
        }
        return OMSLogFactory.getLog(clas);
    }

    /**
     * 得到对应资源的资源实例
     *
     * @param resourceFilePath 资源文件路径
     * @return ResourceBundle 资源实例
     */
    public static ResourceBundle getResourceBundle(String resourceFilePath)
    {
        ResourceBundle resourceBundle =
            ResourceBundle.getBundle(resourceFilePath);
        return resourceBundle;
    }

    /**
     * 得到对应资源的资源实例
     *
     * @param resourceFilePath 资源文件路径
     * @return ResourceBundle 资源实例
     */
    public static ResourceBundle getResourceBundle(String resourceFilePath,
        Locale locale)
    {
        ResourceBundle resourceBundle =
            ResourceBundle.getBundle(resourceFilePath, locale);
        return resourceBundle;
    }

    /**
     * 得到属性文件实例
     */
    public static Properties getPropertiesByFile(String filePath)
    {
        InputStream inputStream = null;
        Properties properties = new Properties();
        try
        {
            File file = new File(filePath);
            inputStream = new FileInputStream(file);
            properties.load(inputStream);
        }
        catch (Exception e)
        {
            log.error(e.getMessage(), e);
        }
        finally
        {
            try
            {
                inputStream.close();
            }
            catch (IOException e)
            {
                log.error(e.getMessage(), e);
            }
        }
        return properties;
    }

    /**
     * 初始化导入文件功能的配置文件
     */
    private static void initConfig()
    {
        XMLReader reader = new XMLReader();
        fileMap = reader.readConfigXMLFile();
        dataBaseMap = reader.readDatabaseXMLFile();
        fileNameMap = reader.getSheetNameMap();
        exportFileNameList = reader.getExportFileNameList();
        tableMap = reader.getTableMap();
        fileSheetNameMap = reader.getFileSheetNameMap();
        fileLanguageVersion = reader.getFileLanguageVersion();
    }

    /**
     * 支持导出文件名称集合
     */
    public static List<String> getExportFileNameList()
    {
        if (exportFileNameList == null)
        {
            initConfig();
        }
        return exportFileNameList;
    }

    /**
     * 根据表名称从database.xml文件中得到表字段集合
     *
     * @param tableName 表名称
     * @return Map<Integer,String> 表字段集合<字段索引,字段名称>
     */
    public static Map<Integer, String> getColumnMapByTableName(String tableName)
    {
        if (dataBaseMap == null)
        {
            initConfig();
        }
        return dataBaseMap.get(tableName.toLowerCase(Locale.getDefault()));
    }

    /**
     * 得到对应的EXCEL文件内容集合
     *
     * @param fileName 文件名称
     * @return Map<String, Map<String, String[]>> EXCEL文件内容集合
     */
    public static Map<String, Map<String, String[]>> getSheetsByFile(
        String fileName)
    {
        if (fileMap == null)
        {
            initConfig();
        }
        return fileMap.get(fileName.toLowerCase(Locale.getDefault()));
    }

    /**
     * 得到对应的EXCEL文件内一个sheet页的内容集合
     *
     * @param fileName 文件名称
     * @param sheetName sheet页名称
     * @return Map<String, String[]> 一个sheet页的内容集合<表列字段名称,[文件列索引,文件列名]>
     */
    public static Map<String, String[]> getColumnBySheet(String fileName,
        String sheetName)
    {
        Map<String, Map<String, String[]>> map =
            getSheetsByFile(fileName.toLowerCase(Locale.getDefault()));
        return map.get(sheetName.toLowerCase(Locale.getDefault()));
    }

    /**
     * 得到表名对应配置的列属性集合
     *
     * @param fileName 表名称
     * @return Map<String, String[]> map<表列字段名称,[文件列索引,文件列名]>
     */
    public static Map<String, String[]> getColumnByTableName(String tableName)
    {
        if (tableMap == null)
        {
            initConfig();
        }
        return tableMap.get(tableName.toLowerCase(Locale.getDefault()));
    }

    /**
     * 得到EXCEL中sheet页对应的表名
     *
     * @param sheetName sheet页名
     * @return String 表名
     */
    public static String getTableName(String fileName, String sheetName)
    {
        if (fileNameMap == null)
        {
            initConfig();
        }
        return fileNameMap.get(fileName.toLowerCase(Locale.getDefault())).get(
            sheetName.toLowerCase(Locale.getDefault()));
    }

    /**
     * 得到EXCEL文件中sheet页的名称集合
     *
     * @return List<String> sheet页名集合,按读入顺序
     */
    public static List<String> getSheetNameByFileName(String fileName)
    {
        if (fileSheetNameMap == null)
        {
            initConfig();
        }
        return fileSheetNameMap.get(fileName.toLowerCase(Locale.getDefault()));
    }

    /**
     * 配置文件中的文件集合
     *
     * @return Map<实际文件中的sheet名称, Map<表字段名称, String[文件中列索引,文件中实际列名]>>
     */
    public static Map<String, Map<String, Map<String, String[]>>> getFileMap()
    {
        if (fileMap == null)
        {
            initConfig();
        }
        return fileMap;
    }

    /**
     * 取当前数据库中数据版本
     *
     * @return String 当前数据版本
     */
    public static int getDataBaseVersion(int languageId)
    {
        int version = 0;
        Connection connection = null;
        Statement statement = null;
        ResultSet rs = null;
        try
        {
            connection = JdbcUtil.getConnection();
            statement = connection.createStatement();
            rs =
                statement
                    .executeQuery("select Version,languageId from version where languageId="
                        + languageId);
            while (rs.next())
            {
                String s = rs.getString("version");
                version = Integer.parseInt(s);
            }
        }
        catch (DataBaseException e)
        {
            log.error(e.getMessage(), e);
        }
        catch (SQLException e)
        {
            log.error(e.getMessage(), e);
        }
        finally
        {
            JdbcUtil.release(rs, statement);
        }
        return version;
    }

    /**
     * 取出当前表中最大ID值
     *
     * @return 表中ID值
     */
    public static long getTableMaxID(String tableName, String idName)
    {
        long id = 0;
        Connection connection = null;
        Statement statement = null;
        ResultSet rs = null;
        try
        {
            connection = JdbcUtil.getConnection();
            statement = connection.createStatement();
            rs =
                statement.executeQuery("select max(" + idName + ") from  "
                    + tableName);
            while (rs.next())
            {
                id = rs.getLong(1);
            }
        }
        catch (DataBaseException e)
        {
            log.error(e.getMessage(), e);
        }
        catch (SQLException e)
        {
            log.error(e.getMessage(), e);
        }
        finally
        {
            JdbcUtil.release(rs, statement);
        }
        id++;
        return id;
    }

    /**
     * 取出当前表中最大ID值(默认ID列名称为“id”)
     *
     * @return 表中ID值
     */
    public static long getTableMaxID(String tableName)
    {
        return getTableMaxID(tableName, "id");
    }

    /**
     * 请空表数据
     *
     * @param histableName 表名
     * @throws DataBaseException
     */
    public static void clearTableData(String tableName)
        throws DataBaseException
    {
        String sql = "delete from " + tableName;
        PreparedStatement preparedStatement = null;
        try
        {
            preparedStatement = JdbcUtil.getConnection().prepareStatement(sql);
            preparedStatement.execute();
        }
        catch (SQLException e)
        {
            throw new DataBaseException(e.getMessage(), e);
        }
        finally
        {
            JdbcUtil.release(null, preparedStatement);
        }
    }

    /**
     * 从文件路径中取出文件名称,不包含文件类型后缀
     *
     * @param filePath
     * @return
     */
    public static String getFileNameFromFilePath(String filePath)
    {
        String fileName =
            filePath.substring(filePath.lastIndexOf("\\") + 1,
                filePath.lastIndexOf("."));
        // 处理有些文件配置路径为test/file.xml格式
        if (fileName.indexOf("/") != -1)
        {
            fileName =
                fileName.substring(fileName.lastIndexOf("/") + 1,
                    fileName.length());
        }
        return fileName;
    }

    /**
     * 获取操作类型
     *
     * @param action
     * @return
     */
    public static String getOperationByAction(int action)
    {
        String op = "";
        switch (action)
        {
            case insert:
                op = Constant.OPERATION_CREATE;
                break;
            case update:
                op = Constant.OPERATION_UPDATE;
                break;
            case delete:
                op = Constant.OPERATION_DELETE;
                break;
            default:
                break;
        }
        return op;
    }

    /**
     * 获取操作类型对应值
     *
     * @param action
     * @return
     */
    public static int getActionByOperation(String operation)
    {
        int action = 0;
        if (Constant.OPERATION_CREATE.equalsIgnoreCase(operation))
        {
            action = insert;
        }
        else if (Constant.OPERATION_UPDATE.equalsIgnoreCase(operation))
        {
            action = update;
        }
        else if (Constant.OPERATION_DELETE.equalsIgnoreCase(operation))
        {
            action = delete;
        }

        return action;
    }

    /**
     * 得到文件中配置版本号子,如果配置不正确返-1。
     *
     * @return int 文件中配置版本号
     */
    public static int getFileVersion(int languageId, ExcelReader excelReader)
    {
        int result = 0;
        try
        {
            Locale locale = Locale.getDefault();
            if (languageId == 1)
            {
                locale = Locale.CHINA;
            }
            else if (languageId == 2)
            {
                locale = Locale.US;
            }
            String fileVersion =
                getResourceBundle(
                    "com.huawei.idesign.tablesetdatas.dataprocess.properties.tool",
                    locale).getString("file_version");
            for (int i = 0; i < excelReader.getSheetNum(); i++)
            {
                String execlSheetName = excelReader.getSheetNameByIndex(i);
                if (fileVersion.equalsIgnoreCase(execlSheetName))
                {
                    List<List<String>> list = excelReader.getAllData(i);
                    String version = list.get(0).get(0);
                    result = (int) Double.parseDouble(version);
                }
            }
        }
        catch (Exception e)
        {
            log.error(e.getMessage(), e);
        }
        return result;
    }

    /**
     * 文件语言版本
     *
     * @return map<文件名,语言版本>
     */
    public static Map<String, String> getFileLanguageVersion()
    {
        if (fileLanguageVersion == null)
        {
            initConfig();
        }
        return fileLanguageVersion;
    }

    /**
     * 将excel中的列索引转换为下标
     *
     * @param op
     * @return
     */
    public static int getIndex(String op)
    {
        String alphabet = "abcdefghijklmnopqrstuvwxyz";
        try
        {
            // 如果是数字,直接返回,是字母再转换
            int index = Integer.parseInt(op) - 1;
            return index;
        }
        catch (NumberFormatException e)
        {
            String s = op.toLowerCase(Locale.getDefault());
            if (s.length() == 1)
            {
                return alphabet.indexOf(s);
            }
            else if (s.length() == 2)
            {
                String fir = s.substring(0, 1);
                String sed = s.substring(1, 2);
                int f =
                    (alphabet.indexOf(fir) + 1) * 26 + alphabet.indexOf(sed);
                return f;
            }
            else
            {
                return -1;
            }
        }

    }

    public static String getStringNoNull(Object str)
    {
        if (str == null)
        {
            return "";
        }
        else
        {
            return str.toString().trim();
        }
    }
   
public static String getPropertyByString(String key, String defaultValue)
{
  return getStringNoNull(Tools.getPropertiesByFile(
    Constant.CipherKey_FILE_PATH).getProperty(key, defaultValue));
}

/**
  * add fuqiang
  * 需要修改的properties键值对集合
  * @param listproperties
  * @see [类、类#方法、类#成员]
  */
public static void modifyProperties(Properties properties)
{
     InputStream inputStream = null;
     OutputStream  fos = null;
        Properties tempProper = new Properties();
        File file = new File(Constant.CipherKey_FILE_PATH);
        try
        {
            inputStream = new FileInputStream(file);
            tempProper.load(inputStream);
            fos = new FileOutputStream(file);
            tempProper.setProperty("userName", properties.getProperty("userName"));
            tempProper.setProperty("passwd", properties.getProperty("passwd"));
            tempProper.store(fos, null);
        }
        catch (Exception e)
        {
            log.error("Tools calss Setting PropertyValue is fail!"+e.getMessage());
        }finally
        {
            try
            {
                if(null != fos)
                {
                    fos.close();
                }
                if(null != inputStream)
                {
                    inputStream.close();
                }
            }
            catch (IOException e)
            {
                log.error("Tools calss close OutputStream fial!"+e.getMessage());
            }
        }
    
}
public static int getPropertyByInt(String key, int defaultValue)
{
  int result = defaultValue;

  String strValue = getStringNoNull(Tools.getPropertiesByFile(
    Constant.CipherKey_FILE_PATH).getProperty(key));

  try {
   result = Integer.parseInt(strValue);
  } catch (NumberFormatException e) {
   log.error(e.getMessage());
  }

  return result;
}
public static boolean authorise()
{
        /**
         * add fuqiang
         * 增加用户鉴权
         */
        boolean isLogin = false;
        try
        {
            //得到解密后的passwd值
            String  tempPasswd = CipherUtil.decryptPwd(getPropertyByString("passwd",""));
            //得到配置文件中的user值
            String tempUser = getPropertyByString("userName","");
            //得到配置的URL
            String tempUrl = getPropertyByString("url","");
            isLogin = HttpValidate.validConnector(tempUser, tempPasswd, tempUrl);
//             if("admin".equals(tempUser) && "admin".equals(tempPasswd))
//             {
//                 isLogin = true;
//             }
        }
        catch (Exception e1)
        {
            log.error("CFGSelectDialog calss Getting PropertyValue is fail!"+e1.getMessage());
        }
       
        return isLogin;
}

==================================================================================================================



public class XMLReader
{
    OMSLog log = Tools.getLog(this.getClass());

    private Map<String, Map<String, String>> fileNameMap =
        new HashMap<String, Map<String, String>>();

    private Map<String, Map<String, String[]>> tableMap =
        new HashMap<String, Map<String, String[]>>();

    private Map<String, List<String>> fileSheetNameMap =
        new HashMap<String, List<String>>();

    /**
     * 支持导出文件名称集合
     */
    List<String> exportFileNameList=new ArrayList<String>();
   
    /**
     * 文件语言版本
     */
    Map<String, String> fileLanguageVersion = new HashMap<String, String>();
   
   
    /**
     * 文件语言版本
     */
    public Map<String, String> getFileLanguageVersion()
    {
        return fileLanguageVersion;
    }

    /**
     * 支持导出文件名称集合
     */
    public List<String> getExportFileNameList()
    {
        return exportFileNameList;
    }

    /**
     * 文件下的sheet名称集合(按读入顺序)
     *
     * @return
     */
    public Map<String, List<String>> getFileSheetNameMap()
    {
        return fileSheetNameMap;
    }

    /**
     * 表名对应的Sheet页名称
     *
     * @return Map<文件名称,<Sheet页名称,数据库表名>>
     */
    public Map<String, Map<String, String>> getSheetNameMap()
    {
        return fileNameMap;
    }

    public Map<String, Map<String, String[]>> getTableMap()
    {
        return this.tableMap;
    }

    /**
     * 解析Sheet页节点下的所有列配置
     *
     * @param columnNodes 列节点List
     * @return Map<数据库表字段,对应Sheet页中的列名>
     */
    private Map<String, String[]> readcolumnNode(NodeList columnNodes)
    {
        Map<String, String[]> columnMap = new HashMap<String, String[]>();
        for (int k = 0; k < columnNodes.getLength(); k++)
        {
            Node columnNode = columnNodes.item(k);
            if (columnNode.getNodeType() == 1)
            {
                String tablecolumn =
                    columnNode.getAttributes().getNamedItem("tablecolumn")
                        .getNodeValue().trim().toLowerCase(Locale.getDefault());
                String columnName =
                    columnNode.getAttributes().getNamedItem("columnname")
                        .getNodeValue().trim().toLowerCase(Locale.getDefault());
                String index =
                    columnNode.getAttributes().getNamedItem("index")
                        .getNodeValue().trim();
                columnMap.put(tablecolumn, new String[] { index, columnName });
            }
        }
        return columnMap;
    }

    /**
     * 解析表节点下的所有列配置
     *
     * @param columnNodes 列节点List
     * @return Map<列索引,列名>
     */
    private Map<Integer, String> readColumnNode(NodeList columnNodes)
    {
        Map<Integer, String> columnMap = new HashMap<Integer, String>();
        for (int k = 0; k < columnNodes.getLength(); k++)
        {
            Node columnNode = columnNodes.item(k);
            if (columnNode.getNodeType() == 1)
            {
                String columnName =
                    columnNode.getAttributes().getNamedItem("name")
                        .getNodeValue().trim().toLowerCase(Locale.getDefault());
                String index =
                    columnNode.getAttributes().getNamedItem("index")
                        .getNodeValue().trim().toLowerCase(Locale.getDefault());
                columnMap.put(Integer.parseInt(index), columnName);
            }
        }
        return columnMap;
    }

  
    /**
     * 解析EXCEL文件配置文件
     *
     * @return Map<EXCEL文件名称,Map<Sheet页名称, Map<数据库表字段,对应Sheet页中的列名>>>
     */
    public Map<String, Map<String, Map<String, String[]>>> readConfigXMLFile()
    {
        String filePath =Constant.PROJECT_DIR+ Constant.CONFIG_FILE_PATH;
     
        DocumentBuilder builder;
        Document doc;
        Map<String, Map<String, Map<String, String[]>>> fileMap =
            new HashMap<String, Map<String, Map<String, String[]>>>();
        try
        {
            DocumentBuilderFactory factory =
                DocumentBuilderFactory.newInstance();
            builder = factory.newDocumentBuilder();
            log.info("Load file [" + filePath + "]");
            doc = builder.parse(new File(filePath));
            Element root = doc.getDocumentElement();

            NodeList nodeList = root.getElementsByTagName("excelfile");

            for (int i = 0; i < nodeList.getLength(); i++)
            {
                Node excelfileNode = nodeList.item(i);
                if (excelfileNode.getNodeType() == 1)
                {
                    String excelfileName =
                        excelfileNode.getAttributes().getNamedItem("filename")
                            .getNodeValue().trim()
                            .toLowerCase(Locale.getDefault());
                    String isExport= excelfileNode.getAttributes().getNamedItem("supportExport")
                    .getNodeValue().trim();
                   
                    String language= excelfileNode.getAttributes().getNamedItem("language")
                    .getNodeValue().trim();
                    //保存支持导出文件名称
                    if (Boolean.valueOf(isExport))
                    {
                        exportFileNameList.add(excelfileName);
                    }
                   
                    fileLanguageVersion.put(excelfileName, language);
                   
                    NodeList sheetNodes = excelfileNode.getChildNodes();
                    fileMap.put(excelfileName,
                        readSheetNode(excelfileName, sheetNodes));
                }
            }
        }
        catch (Exception e)
        {
            log.error(e.getMessage(), e);
        }
        return fileMap;
    }

    /**
     * 读取数据库配置表信息
     *
     * @return Map<表名,Map<列索引,列名>>
     */
    public Map<String, Map<Integer, String>> readDatabaseXMLFile()
    {
        String filePath = Constant.PROJECT_DIR+Constant.DATABASE_FILE_PATH;
        DocumentBuilder builder;
        Document doc;
        Map<String, Map<Integer, String>> fileMap =
            new HashMap<String, Map<Integer, String>>();
        try
        {
            DocumentBuilderFactory factory =
                DocumentBuilderFactory.newInstance();
            builder = factory.newDocumentBuilder();
            log.info("Load file [" + filePath + "]");
            doc = builder.parse(new File(filePath));
            Element root = doc.getDocumentElement();

            NodeList nodeList = root.getElementsByTagName("table");

            for (int i = 0; i < nodeList.getLength(); i++)
            {
                Node excelfileNode = nodeList.item(i);
                if (excelfileNode.getNodeType() == 1)
                {
                    String tableName =
                        excelfileNode.getAttributes().getNamedItem("name")
                            .getNodeValue().trim()
                            .toLowerCase(Locale.getDefault());
                    NodeList columnNodes = excelfileNode.getChildNodes();
                    fileMap.put(tableName, readColumnNode(columnNodes));
                }
            }
        }
        catch (Exception e)
        {
            log.error(e.getMessage(), e);
        }
        return fileMap;
    }

    /**
     * 解析文件节点下的所有Sheet页配置
     *
     * @param columnNodes Sheet页节点List
     * @return Map<Sheet页名称, Map<数据库表字段,对应Sheet页中的列名>>
     */
    private Map<String, Map<String, String[]>> readSheetNode(
        String excelfileName, NodeList sheetNodes)
    {
        Map<String, Map<String, String[]>> sheetMap =
            new HashMap<String, Map<String, String[]>>();
        Map<String, String> sheetNameMap = new HashMap<String, String>();
        List<String> list = new ArrayList<String>();
        for (int k = 0; k < sheetNodes.getLength(); k++)
        {
            Node sheetNode = sheetNodes.item(k);
            if (sheetNode.getNodeType() == 1)
            {
                String tableName =
                    sheetNode.getAttributes().getNamedItem("tableName")
                        .getNodeValue().trim().toLowerCase(Locale.getDefault());
                String sheetName =
                    sheetNode.getAttributes().getNamedItem("sheetname")
                        .getNodeValue().trim().toLowerCase(Locale.getDefault());
                sheetNameMap.put(sheetName, tableName);
                NodeList columnNodes = sheetNode.getChildNodes();
                Map<String, String[]> columnMap = readcolumnNode(columnNodes);
                sheetMap.put(sheetName, columnMap);
                if (tableMap.containsKey(tableName))
                {
                    tableName = tableName + "_" + sheetName;
                }
                tableMap.put(tableName, columnMap);
                list.add(sheetName);
            }
        }
        fileNameMap.put(excelfileName, sheetNameMap);
        fileSheetNameMap.put(excelfileName, list);
        return sheetMap;
    }

=========================================================================================================================

加密与解密

public class CipherUtil
{

    private static OMSLog log = Tools.getLog(CipherUtil.class);

    private static String CIPHER_TYPE = "AES";

    private static String CIPHER_MODE = "AES/ECB/PKCS5Padding";

    /**
     * 用AES算法解密
     */
    public static String decryptPwd(String input)
        throws NoSuchAlgorithmException, NoSuchPaddingException,
        InvalidKeyException, IOException, IllegalBlockSizeException,
        BadPaddingException
    {
       
        return decryptPwd(input,false);
    }
   
    /**
     * 服务端用AES算法解密
     */
    public static String decryptPwd(String input,boolean isServer)
        throws NoSuchAlgorithmException, NoSuchPaddingException,
        InvalidKeyException, IOException, IllegalBlockSizeException,
        BadPaddingException
    {
        byte[] keydata = isServer?getKey(Constant.CipherKey_SERVER_FILE_PATH):getKey();
       
        SecretKeySpec key = new SecretKeySpec(keydata, 0, 16, CIPHER_TYPE);
        Cipher cipher = Cipher.getInstance(CIPHER_MODE);
        cipher.init(Cipher.DECRYPT_MODE, key);
        BASE64Decoder decoder = new BASE64Decoder();
        byte[] data = decoder.decodeBuffer(input);
        byte[] decryptData = cipher.doFinal(data, 0, data.length);
        return new String(decryptData);
    }

    /**
     * 用AES算法加密
     *
     * @throws IOException
     */
    public static String encryptPwd(String input)
        throws NoSuchAlgorithmException, NoSuchPaddingException,
        InvalidKeyException, IllegalBlockSizeException, BadPaddingException,
        IOException
    {
        SecretKeySpec key = new SecretKeySpec(getKey(), 0, 16, CIPHER_TYPE);
        Cipher cipher = Cipher.getInstance(CIPHER_MODE);
        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] bs = cipher.doFinal(input.getBytes());
        return new sun.misc.BASE64Encoder().encode(bs);
    }

    /**
     * 生成AES加密密钥
     *
     * @throws IOException
     * @throws NoSuchPaddingException
     * @throws NoSuchAlgorithmException
     * @throws InvalidKeyException
     * @throws BadPaddingException
     * @throws IllegalBlockSizeException
     */
    private static byte[] getKey()
        throws NoSuchAlgorithmException, NoSuchPaddingException,
        InvalidKeyException, IllegalBlockSizeException, BadPaddingException,
        IOException
    {
        return getKey(Constant.CipherKey_FILE_PATH);
    }

    /**
     * 生成AES加密密钥
     *
     * @throws IOException
     * @throws NoSuchPaddingException
     * @throws NoSuchAlgorithmException
     * @throws InvalidKeyException
     * @throws BadPaddingException
     * @throws IllegalBlockSizeException
     */
    private static byte[] getKey(String path)
        throws NoSuchAlgorithmException, NoSuchPaddingException,
        InvalidKeyException, IllegalBlockSizeException, BadPaddingException,
        IOException
    {
        String initKey = "ci~+Ides5ign*1=)";
        String input =
            Tools.getStringNoNull(Tools.getPropertiesByFile(
                path).getProperty("CipherKey"));
        SecretKeySpec key = new SecretKeySpec(initKey.getBytes(), CIPHER_TYPE);
        Cipher cipher = Cipher.getInstance(CIPHER_MODE);
        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] bs = cipher.doFinal(input.getBytes());
        return bs;
    }

=========================

http://www.iteye.com/topic/1122076
分享到:
评论

相关推荐

    Java学习七宗罪

    ### Java学习七宗罪 在IT领域,尤其是对于初学者来说,Java无疑是一门非常重要的编程语言。然而,在学习过程中,不少学员会遇到各种各样的问题,这些问题往往会导致学习效率低下,甚至失去继续深入的动力。《Java...

    Java的一点心得

    从给定的文件信息中,我们可以提炼出一系列关于Java学习的重要知识点,涵盖了语言特性、编程实践、面向对象概念以及常用库的使用等多方面内容。 ### Java基础与学习心态 - **心态调整**:首先强调了学习过程中心态...

    java学习过程中一点总结带实例程序,按章节渐进的

    这份“java学习过程中一点总结带实例程序”涵盖了Java编程的多个核心领域,为初学者提供了全面的学习指导,通过实际编程案例,有助于加深对理论知识的理解。对于想快速入门Java的朋友,这是一个很好的起点。

    Java学习资料&项目源码&教程,基于java的聊天系统的设计实现(20).zip

    Java的异常处理机制和log4j等日志库可以帮助实现这一点。 10. **测试**:最后,开发者需要编写单元测试和集成测试,确保代码的正确性和稳定性。JUnit和Mockito等工具可以辅助进行这些测试。 在压缩包“基于java的...

    msn聊天程序Java仿真代码.java源码学习

    Java.util.logging API 或者第三方库如Log4j可以帮助我们实现这一点。 **9. 单元测试与集成测试** 确保代码质量的一个重要步骤是进行单元测试和集成测试。JUnit 是Java中广泛使用的单元测试框架,而Mockito可以用来...

    JAVA 火车售票系统

    Java的线程机制可以帮助你实现这一点,如创建Thread类的子类或者使用Runnable接口。 6. **IO流**:用于读写数据,如保存和加载火车信息、用户购票记录等。Java的FileInputStream和FileOutputStream可以用来读写文件...

    基础的Java工单系统源码.zip

    7. **错误处理和日志记录**:良好的错误处理和日志记录对于排查问题和维护系统稳定至关重要,Java提供了一系列工具和技术来实现这一点。 8. **测试**:为了保证质量,源码中可能包含了单元测试和集成测试,使用...

    分享Java相关的东西 - Java安全漫谈笔记相关内容.zip

    JavaThings - Java安全漫谈笔记相关《Java安全漫谈》是我在写的一点Java学习相关的随笔,不是很严谨,也不是啥高。这个存储库主要是记录并整理一下,附加一些代码。Java 安全漫谈目录Java安全漫谈 - 01.Java的动态...

    java_tutorial:创建Java项目以记录我作为Java开发人员的进度

    通常,在大学里用Java讲授Java时,会使用IDE,但是当您真正想学习一些东西时,则不应使用使您轻松学习的工具,至少在学习时不这样做。 此练习和下一个练习的另一个重要方面是docker的功能。 Docker具有一些出色的...

    JAVA简易学籍管理系统

    学习使用JDBC(JAVA Database Connectivity)进行SQL操作,如添加、查询、更新和删除记录,是提升系统功能的关键。 8. **命令行参数**:高级一点的实现可能会考虑命令行参数,使得程序可以根据不同的参数执行不同的...

    Java 课程设计 书店管理系统

    Java的异常处理机制和日志库(如Log4j)可以帮助我们实现这一点。 10. **测试与调试**:为了保证软件质量,需要编写单元测试和集成测试。JUnit和Mockito等工具可以帮助进行测试驱动开发(TDD),找出并修复潜在问题...

    JAVA中间接口转发DEMO

    Java的日志框架如Log4j或SLF4J可以帮助我们实现这一点。 总结,这个"JAVA中间接口转发DEMO"涵盖了Java中间层开发的核心概念,包括异常处理、重试、缓存、数据转换、负载均衡、熔断降级策略以及测试和日志记录。通过...

    java 抽奖系统jar 完整版

    Java的`Thread`类或`ExecutorService`接口可以实现这一点。 4. **GUI(图形用户界面)**:为了使用户能够交互,抽奖系统通常会有一个用户友好的界面。Java Swing或JavaFX库可以用来创建这些界面元素,如按钮、...

    学习java的积点忽略之处

    以下是我从我的读书笔记中整理出的一些容易被忽视的Java学习知识点。 1. **基本概念理解**:Java是一种面向对象的语言,但很多初学者会混淆面向过程和面向对象的区别。理解类、对象、继承、封装和多态等核心概念是...

    Java语言学习六大要点

    Java在声明静态方法和属性时与实例方法和属性的区别仅在于是否使用了`static`关键字,而在调用时则保持一致,这一点与C++有所不同。 #### 二、重视接口 接口在Java中扮演着核心角色,它提供了一种定义行为规范的...

    Java学习笔记,数组初步

    "Java数组初步" 数组是Java编程语言中的一种基本数据结构,它是相同类型数据的有序...可以通过一些优化手段来提高冒泡排序算法的效率,例如:记录最后一次交换的位置,以便在下一轮排序时可以跳过已经排序好的部分。

    Java代理服务器程序

    总之,这个Java代理服务器程序涵盖了网络编程、HTTP协议解析、并发处理、缓存策略、安全通信和日志记录等多个方面,对深入理解这些Java技术以及网络原理有着极大的学习价值。通过研究这个项目,开发者可以提升自己在...

    java版围棋v3

    而“保存棋谱”功能则让玩家可以记录并回顾对局,便于学习和分享。 “打谱”是指根据已有的围棋棋谱进行复盘和研究,这对于学习高手的布局和策略非常有帮助。这个软件支持打谱功能,意味着玩家可以导入和研究经典的...

    java版围棋v2

    总的来说,"java版围棋v2"是一个集成了基本围棋规则和一些高级功能的Java应用,适合初级到中级的Java开发者学习和研究。通过这个项目,开发者可以深入理解Java Swing的用法,以及如何实现复杂的棋类游戏逻辑。对于...

    即时聊天工具--java版的icq

    Java提供了标准的序列化机制来实现这一点。 7. **协议实现**:ICQ最初是基于特定的通信协议运行的,如OSCAR(Open System for Communicating in Realtime)。在Java版的ICQ中,开发者需要理解并实现这个协议,以...

Global site tag (gtag.js) - Google Analytics