如何有效防止Java程序源碼被人偷窺?(2)_Mssql數(shù)據(jù)庫教程
推薦:如何快速生成100萬不重復(fù)的8位編號(hào)最近在論壇看到有人問,如何快速生成100萬不重復(fù)的8位編號(hào),對(duì)于這個(gè)問題,有幾點(diǎn)是需要注意的: 1. 如何生成8位隨機(jī)數(shù),生成的數(shù)越隨機(jī),重復(fù)的可能性當(dāng)然越小 2. 控制不重復(fù)
Listing 2顯示了一個(gè)簡(jiǎn)單的loadClass實(shí)現(xiàn)。代碼中的大部分對(duì)所有ClassLoader對(duì)象來說都一樣,但有一小部分(已通過注釋標(biāo)記)是特有的。在處理過程中,ClassLoader對(duì)象要用到其他幾個(gè)輔助方法:
findLoadedClass:用來進(jìn)行檢查,以便確認(rèn)被請(qǐng)求的類當(dāng)前還不存在。loadClass方法應(yīng)該首先調(diào)用它。
defineClass:獲得原始類文件字節(jié)碼數(shù)據(jù)之后,調(diào)用defineClass把它轉(zhuǎn)換成一個(gè)Class對(duì)象。任何loadClass實(shí)現(xiàn)都必須調(diào)用這個(gè)方法。
findSystemClass:提供默認(rèn)ClassLoader的支持。如果用來尋找類的定制方法不能找到指定的類(或者有意地不用定制方法),則可以調(diào)用該方法嘗試默認(rèn)的裝入方式。這是很有用的,特別是從普通的JAR文件裝入標(biāo)準(zhǔn)Java類時(shí)。
resolveClass:當(dāng)JVM想要裝入的不僅包括指定的類,而且還包括該類引用的所有其他類時(shí),它會(huì)把loadClass的resolve參數(shù)設(shè)置成true。這時(shí),我們必須在返回剛剛裝入的Class對(duì)象給調(diào)用者之前調(diào)用resolveClass。
三、加密、解密
Java加密擴(kuò)展即Java Cryptography Extension,簡(jiǎn)稱JCE。它是Sun的加密服務(wù)軟件,包含了加密和密匙生成功能。JCE是JCA(Java Cryptography Architecture)的一種擴(kuò)展。
JCE沒有規(guī)定具體的加密算法,但提供了一個(gè)框架,加密算法的具體實(shí)現(xiàn)可以作為服務(wù)提供者加入。除了JCE框架之外,JCE軟件包還包含了SunJCE服務(wù)提供者,其中包括許多有用的加密算法,比如DES(Data Encryption Standard)和Blowfish。
為簡(jiǎn)單計(jì),在本文中我們將用DES算法加密和解密字節(jié)碼。下面是用JCE加密和解密數(shù)據(jù)必須遵循的基本步驟:
步驟1:生成一個(gè)安全密匙。在加密或解密任何數(shù)據(jù)之前需要有一個(gè)密匙。密匙是隨同被加密的應(yīng)用一起發(fā)布的一小段數(shù)據(jù),Listing 3顯示了如何生成一個(gè)密匙。 【Listing 3:生成一個(gè)密匙】
| 以下為引用的內(nèi)容: // DES算法要求有一個(gè)可信任的隨機(jī)數(shù)源 SecureRandom sr = new SecureRandom(); // 為我們選擇的DES算法生成一個(gè)KeyGenerator對(duì)象 KeyGenerator kg = KeyGenerator.getInstance( "DES" ); kg.init( sr ); // 生成密匙 SecretKey key = kg.generateKey(); // 獲取密匙數(shù)據(jù) byte rawKeyData[] = key.getEncoded(); /* 接下來就可以用密匙進(jìn)行加密或解密,或者把它保存 為文件供以后使用 */ doSomething( rawKeyData ); |
步驟2:加密數(shù)據(jù)。得到密匙之后,接下來就可以用它加密數(shù)據(jù)。除了解密的ClassLoader之外,一般還要有一個(gè)加密待發(fā)布應(yīng)用的獨(dú)立程序(見Listing 4)。 【Listing 4:用密匙加密原始數(shù)據(jù)】
| 以下為引用的內(nèi)容: // DES算法要求有一個(gè)可信任的隨機(jī)數(shù)源 SecureRandom sr = new SecureRandom(); byte rawKeyData[] = /* 用某種方法獲得密匙數(shù)據(jù) */; // 從原始密匙數(shù)據(jù)創(chuàng)建DESKeySpec對(duì)象 DESKeySpec dks = new DESKeySpec( rawKeyData ); // 創(chuàng)建一個(gè)密匙工廠,然后用它把DESKeySpec轉(zhuǎn)換成 // 一個(gè)SecretKey對(duì)象 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance( "DES" ); SecretKey key = keyFactory.generateSecret( dks ); // Cipher對(duì)象實(shí)際完成加密操作 Cipher cipher = Cipher.getInstance( "DES" ); // 用密匙初始化Cipher對(duì)象 cipher.init( Cipher.ENCRYPT_MODE, key, sr ); // 現(xiàn)在,獲取數(shù)據(jù)并加密 byte data[] = /* 用某種方法獲取數(shù)據(jù) */ // 正式執(zhí)行加密操作 byte encryptedData[] = cipher.doFinal( data ); // 進(jìn)一步處理加密后的數(shù)據(jù) doSomething( encryptedData ); 步驟3:解密數(shù)據(jù)。運(yùn)行經(jīng)過加密的應(yīng)用時(shí),ClassLoader分析并解密類文件。操作步驟如Listing 5所示。 【Listing 5:用密匙解密數(shù)據(jù)】 // DES算法要求有一個(gè)可信任的隨機(jī)數(shù)源 SecureRandom sr = new SecureRandom(); byte rawKeyData[] = /* 用某種方法獲取原始密匙數(shù)據(jù) */; // 從原始密匙數(shù)據(jù)創(chuàng)建一個(gè)DESKeySpec對(duì)象 DESKeySpec dks = new DESKeySpec( rawKeyData ); // 創(chuàng)建一個(gè)密匙工廠,然后用它把DESKeySpec對(duì)象轉(zhuǎn)換成 // 一個(gè)SecretKey對(duì)象 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance( "DES" ); SecretKey key = keyFactory.generateSecret( dks ); // Cipher對(duì)象實(shí)際完成解密操作 Cipher cipher = Cipher.getInstance( "DES" ); // 用密匙初始化Cipher對(duì)象 cipher.init( Cipher.DECRYPT_MODE, key, sr ); // 現(xiàn)在,獲取數(shù)據(jù)并解密 byte encryptedData[] = /* 獲得經(jīng)過加密的數(shù)據(jù) */ // 正式執(zhí)行解密操作 byte decryptedData[] = cipher.doFinal( encryptedData ); // 進(jìn)一步處理解密后的數(shù)據(jù) doSomething( decryptedData ); |
分享:四個(gè)語句幫你提高 SQL Server 的伸縮性本文講解如何使用LEFT JOIN、CROSS JOIN以及IDENTITY值的檢索,這些技術(shù)來提高基于SQL Server的應(yīng)用程序的性能或改善其可伸縮性。 你將遇到的現(xiàn)象:應(yīng)用程序中的SQL 查詢不能按照您想要的方式
- sql 語句練習(xí)與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個(gè)方法
- sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無法查看數(shù)據(jù)庫,提示 無法為該請(qǐng)求檢索數(shù)據(jù) 錯(cuò)誤916解決方法
- SQLServer日志清空語句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲(chǔ)過程參數(shù)的用法實(shí)例詳解
Mssql數(shù)據(jù)庫教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫教程推薦
- 解讀優(yōu)化SQL Server數(shù)據(jù)庫查詢方法
- 如何查看并導(dǎo)出數(shù)據(jù)表中字段的注釋信息
- 查詢表里有N組相同記錄的SQL語句
- MSSQL2005在networkservice權(quán)限運(yùn)行附加數(shù)據(jù)庫報(bào)(Microsoft SQL Server,錯(cuò)誤: 5120)
- SQL Server 2005通用分頁存儲(chǔ)過程及多表聯(lián)接應(yīng)用
- SQL Server 數(shù)據(jù)庫清除日志的方法
- 解讀SQL Server 2008可用性
- SQL Server 2008存儲(chǔ)結(jié)構(gòu)之GAM、SGAM介紹
- 談數(shù)據(jù)庫手邊系列:SQL Server數(shù)據(jù)表信息
- 解讀4個(gè)編寫SQL語句需要注意的常識(shí)
猜你也喜歡看這些
- 如何用命令行進(jìn)入mysql具體操作步驟
- 基于一致性hash算法(consistent hashing)的使用詳解
- mysql 按照時(shí)間段來獲取數(shù)據(jù)的方法
- 解析mysql中:單表distinct、多表group by查詢?nèi)コ貜?fù)記錄
- MySQL筆記之修改表的實(shí)現(xiàn)方法
- MySQL筆記之別名的使用
- 解析SQL語句中Replace INTO與INSERT INTO的不同之處
- Ubuntu Server下MySql數(shù)據(jù)庫備份腳本代碼
- mysql中text與varchar與char的區(qū)別
- Mysql,phpmyadmin密碼忘了怎么辦
- 相關(guān)鏈接:
- 教程說明:
Mssql數(shù)據(jù)庫教程-如何有效防止Java程序源碼被人偷窺?(2)
。