因若干因素, 需有兩台 Oracle EBS 主機, 但這兩台主機的 Org ID 要相同.當這兩台主機的Sequence 不一致時, 該怎麼辦?

HR_ORGANIZATION_UNITS_V.png  

我們先可以查看一下控制 Org ID 的 Sequence: HR.HR_ORGANIZATION_UNITS_S

CREATE SEQUENCE HR.HR_ORGANIZATION_UNITS_S
  START WITH 1041
  MAXVALUE 999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER;

它一次是取20個序號到 Database 的 Cache 中, 所以若有一方較小, 則可以手動去耗掉一些號碼:

select HR.HR_ORGANIZATION_UNITS_S.NEXTVAL
FROM dual;

select hr.HR_ORGANIZATION_UNITS_S.currval
FROM dual;
文章標籤

MIS 發表在 痞客邦 留言(0) 人氣()

Linux kernel 自 2.6.28 開始正式支持新的檔案系統 Ext4。 Ext4 是 Ext3 的改進版,修改了 Ext3 中部分重要的資料結構,而不僅僅像 Ext3 對 Ext2 那樣,只是增加了一個日誌功能而已。Ext4 可以提供更佳的性能和可靠性,還有更為豐富的功能:

1. 與 Ext3 相容。 執行若干條命令,就能從 Ext3 線上遷移到 Ext4,而無須重新格式化磁片或重新安裝系統。原有 Ext3 資料結構照樣保留,Ext4 作用於新資料,當然,整個檔案系統因此也就獲得了 Ext4 所支援的更大容量。

2. 更大的檔案系統和更大的文件。 較之 Ext3 目前所支持的最大 16TB 檔案系統和最大 2TB 檔,Ext4 分別支持 1EB(1,048,576TB, 1EB=1024PB, 1PB=1024TB)的檔案系統,以及 16TB 的檔。

3. 無限數量的子目錄。 Ext3 目前只支持 32,000 個子目錄,而 Ext4 支持無限數量的子目錄。

4. Extents。 Ext3 採用間接塊映射,當操作大檔時,效率極其低下。比如一個 100MB 大小的檔,在 Ext3 中要建立 25,600 個資料塊(每個資料塊大小為 4KB)的映射表。而 Ext4 引入了現代檔案系統中流行的 extents 概念,每個 extent 為一組連續的資料塊,上述檔則表示為“該檔資料保存在接下來的 25,600 個資料塊中”,提高了不少效率。

5. 多塊分配。 當寫入資料到 Ext3 檔案系統中時,Ext3 的資料塊分配器每次只能分配一個 4KB 的塊,寫一個 100MB 檔就要調用 25,600 次資料塊分配器,而 Ext4 的多塊分配器“multiblock allocator”(mballoc) 支持一次調用分配多個資料塊。

6. 延遲分配。 Ext3 的資料塊分配策略是儘快分配,而 Ext4 和其它現代檔作業系統的策略是盡可能地延遲分配,直到檔在 cache 中寫完才開始分配資料塊並寫入磁片,這樣就能優化整個檔的資料塊分配,與前兩種特性搭配起來可以顯著提升性能。

7. 快速 fsck。 以前執行 fsck 第一步就會很慢,因為它要檢查所有的 inode,現在 Ext4 給每個組的 inode 表中都添加了一份未使用 inode 的列表,今後 fsck Ext4 檔案系統就可以跳過它們而只去檢查那些在用的 inode 了。

8. 日誌校驗。 日誌是最常用的部分,也極易導致磁片硬體故障,而從損壞的日誌中恢復資料會導致更多的資料損壞。Ext4 的日誌校驗功能可以很方便地判斷日誌資料是否損壞,而且它將 Ext3 的兩階段日誌機制合併成一個階段,在增加安全性的同時提高了性能。

9. “無日誌”(No Journaling)模式。 日誌總歸有一些開銷,Ext4 允許關閉日誌,以便某些有特殊需求的使用者可以借此提升性能。

10. 線上磁碟重組。 儘管延遲分配、多塊分配和 extents 能有效減少檔案系統碎片,但碎片還是不可避免會產生。Ext4 支援線上磁碟重組,並將提供 e4defrag 工具進行個別檔或整個檔案系統的磁碟重組。

11. inode 相關特性。 Ext4 支持更大的 inode,較之 Ext3 默認的 inode 大小 128 位元組,Ext4 為了在 inode 中容納更多的擴展屬性(如納秒時間戳記或 inode 版本),默認 inode 大小為 256 位元組。Ext4 還支援快速擴展屬性(fast extended attributes)和 inode 保留(inodes reservation)。

12. 持久預分配(Persistent preallocation)。 P2P 軟體為了保證下載檔案有足夠的空間存放,常常會預先創建一個與所下載檔案大小相同的空檔,以免未來的數小時或數天之內磁碟空間不足導致下載失敗。 Ext4 在檔案系統層面實現了持久預分配並提供相應的 API(libc 中的 posix_fallocate()),比應用軟體自己實現更有效率。

13. 預計啟用 barrier。 磁片上配有內部緩存,以便重新調整批量資料的寫操作順序,優化寫入性能,因此檔案系統必須在日誌資料寫入磁片之後才能寫 commit 記錄,若 commit 記錄寫入在先,而日誌有可能損壞,那麼就會影響資料完整性。Ext4 默認啟用 barrier,只有當 barrier 之前的資料全部寫入磁片,才能寫 barrier 之後的資料。(可通過 "mount -o barrier=0" 命令禁用該特性)


ext2 與 ext3

Linux ext2/ext3檔案系統使用索引節點來記錄檔資訊,作用像windows的檔案配置表。索引節點是一個結構,它包含了一個檔的長度、創建及修改時 間、許可權、所屬關係、磁片中的位置等資訊。一個檔案系統維護了一個索引節點的陣列,每個檔或目錄都與索引節點陣列中的唯一一個元素對應。系統給每個索引 節點分配了一個號碼,也就是該節點在陣列中的索引號,稱為索引節點號。 linux檔案系統將檔索引節點號和檔案名同時保存在目錄中。所以,目錄只是將檔的名稱和它的索引節點號結合在一起的一張表,目錄中每一對檔案名稱和 索引節點號稱為一個連接。 對於一個檔來說有唯一的索引節點號與之對應,對於一個索引節點號,卻可以有多個檔案名與之對應。因此,在磁片上的同一個檔可以通過不同的路徑去訪問 它。


Linux 之前預設情況下使用的檔案系統為Ext2,ext2檔案系統的確高效穩定。但是,隨著Linux系統在關鍵業務中的應用,Linux檔案系統的弱點也漸漸 顯露出來了:其中系統預設使用的ext2檔案系統是非日誌檔案系統。這在關鍵行業的應用是一個致命的弱點。本文向各位介紹Linux下使用ext3日誌文 件系統應用。


Ext3檔案系統是直接從Ext2檔案系統發展而來,目前ext3檔案系統已經非常穩定可靠。它完全相容ext2檔案系統。使用者可以平滑地過渡到一個日誌功能健全的檔案系統中來。這實際上了也是ext3日誌檔案系統初始設計的初衷。

Ext3日誌檔案系統的特點
1、高可用性:系統使用了ext3檔案系統後,即使在非正常關機後,系統也不需要檢查檔案系統。宕機發生後,恢復ext3檔案系統的時間只要數十秒鐘。

2、資料的完整性:ext3 檔案系統能夠極大地提高檔案系統的完整性,避免了意外宕機對檔案系統的破壞。在保證資料完整性方面,ext3檔案系統有2種模式可供選擇。其中之一就是 “同時保持檔案系統及資料的一致性”模式。採用這種方式,你永遠不再會看到由於非正常關機而存儲在磁片上的垃圾檔。

3、檔案系統的速度:儘管使用ext3檔案系統時,有時在存儲資料時可能要多次寫資料,但是,從總體上看來,ext3比ext2的性能還要好一些。這是因為ext3的日誌功能對磁片的驅動器讀寫頭進行了優化。所以,檔案系統的讀寫性能較之Ext2檔案系統並來說,性能並沒有降低。

4、資料轉換:由 ext2檔案系統轉換成ext3檔案系統非常容易,只要簡單地鍵入兩條命令即可完成整個轉換過程,用戶不用花時間備份、恢復、格式化分區等。用一個 ext3檔案系統提供的小工具tune2fs,它可以將ext2檔案系統輕鬆轉換為ext3日誌檔案系統。另外,ext3檔案系統可以不經任何更改,而直接載入成為ext2檔案系統。

5、多種日誌模式:Ext3 有多種日誌模式,一種工作模式是對所有的檔資料及metadata(定義檔案系統中資料的資料,即資料的資料)進行日誌記錄(data=journal 模式);另一種工作模式則是只對metadata記錄日誌,而不對資料進行日誌記錄,也即所謂data=ordered或者data=writeback 模式。系統管理人員可以根據系統的實際工作要求,在系統的工作速度與檔資料的一致性之間作出選擇。


附註:用SSD硬碟測試,測試結果除了表明 Intel SSD 的讀寫速度快得令人咋舌之外,還可以說明 Ext4 的各方面性能都超過了上一代 Ext3,甚至在大多數情況下,比沒有日誌功能的 Ext2 還要快出不少。

參考:http://blog.csdn.net/galdys/article/details/8268694

文章標籤

MIS 發表在 痞客邦 留言(0) 人氣()

  若依照 管理 MySQL 的免費工具 phpMyAdmin 這一篇的步驟,應該已來建立帳號 xoops_root 並能管理  polin_xoops 資料庫了。在此,再回顧其中的重要片斷如下:  

phpMyAdmin_main.png  

  整個建立網站需要的步驟為:建立新資料庫 -> 建立管理此資料庫的帳號 -> 付予此帳號對此資料庫有全部的管理權限。上圖按下 建立 的按鈕後,就會產生一個叫作 polin_xoops 的資料庫。

mysqldb_polin_xoops.png  

  然後點選 伺服器: localhost 或者 左邊的主目錄( 房子的圖示 ) 回到 phpMyAdmin 的主目錄,點選 權限 連結來建立管理此資料庫的帳號。

mysql_users.png  

   點選 新增使用者 後,在 使用者名稱 欄位輸入管理此資料庫的帳號:xoops_root,主機 欄位選 本地 ( localhost ) 即可,密碼請自定,但請要記得,不然就無法連到 MySQL 資料庫了;至於 整體權限 請不要選,因為我們要此帳號 xoops_root 只能管理  polin_xoops 的資料庫,為什麼不直接使用 root 的帳號就好?因為一切都只是為了安全。

mysql_user_dbroot.png  

  填完資料後,按下執行就會建好帳號 xoops_root ,接下來在 指定資料庫權限 中選擇我們要管理的  polin_xoops 資料庫。

mysqldb_permission.png  

這時因為是指定資料庫,要求帳號 xoops_root 管理  polin_xoops 的資料庫,所以權限要全選起來。

mysqldb_rights.png  

  建立 XOOPS 網站所需要的 MySQL 資料庫重要的資訊有:帳號,密碼,主機名以及資料庫名字,以本書的範例來說這些資訊為:

帳號:xoops_root
密碼:password
主機:localhost
資料庫:polin_xoops

  這些資料您是可以自己決定的,不一定要照本書來定義,但這四個參數千萬不能忘,不然 XOOPS 就無法連到 MySQL 資料庫了。

文章標籤

MIS 發表在 痞客邦 留言(0) 人氣()

  在這一篇文章 Apache - VirtualHost 架設虛擬網站 中我們已建立了屬於 phpMyAdmin 的虛擬網站,本章大致來介紹一下如何登入 phpMyAdmin ,並如何透過 phpMyAdmin 來管理 MySQL 資料庫。 ( 註:若您沒作虛擬網站的設定,那網址應該是 http://localhost/phpMyAdmin ) 就會出現要您輸入帳號及密碼的登入畫面。

phpMyAdmin_login.png  

  這裡的帳號及密碼就是在環境架設- 利用 Apache 架設網站伺服器服務 安裝時所設定的,登入後的畫面如下圖,此為 phpMyAdmin 的主目錄,左邊的資料庫有個下拉選單,可以用來選擇你要管理的資料庫。中間為主要畫面,要建立一個新的資料庫很簡單,只要在 建立新資料庫 下方輸入資料庫的名字,然後按下建立即可,不過這裡要注意的一點,MySQL 連線校對 記得用預設值 utf8_unicode_ci  不要改變。因為未來我們要建立的網站也是 UTF8,資料庫與網站的編碼若都是UTF8,那就不會有需要轉碼的問題了。 

  整個建立網站需要的步驟為:建立新資料庫 -> 建立管理此資料庫的帳號 -> 付予此帳號對此資料庫有全部的管理權限。上圖按下 建立 的按鈕後,就會產生一個叫作 polin_xoops 的資料庫。

mysqldb_polin_xoops.png


  

 
 

  然後點選 伺服器: localhost 或者 左邊的主目錄( 房子的圖示 ) 回到 phpMyAdmin 的主目錄,點選 權限 連結來建立管理此資料庫的帳號。

mysql_users.png

   點選 新增使用者 後,在 使用者名稱 欄位輸入管理此資料庫的帳號:xoops_root,主機 欄位選 本地 ( localhost ) 即可,密碼請自定,但請要記得,不然就無法連到 MySQL 資料庫了;至於 整體權限 請不要選,因為我們要此帳號 xoops_root 只能管理  polin_xoops 的資料庫,為什麼不直接使用 root 的帳號就好?因為一切都只是為了安全。

mysql_user_dbroot.png  

  填完資料後,按下執行就會建好帳號 xoops_root ,接下來在 指定資料庫權限 中選擇我們要管理的  polin_xoops 資料庫。

mysqldb_permission.png

這時因為是指定資料庫,要求帳號 xoops_root 管理  polin_xoops 的資料庫,所以權限要全選起來。

mysqldb_rights.png  

大體上建立帳號,以及讓帳號專責管理資料庫的作法就如上的步驟就可以了。

文章標籤

MIS 發表在 痞客邦 留言(0) 人氣()

  有別於微軟 Microsoft 的 IE 流覽器,目前流覽網頁的另一項工具 FireFox,FireFox 除了體積小、效率快以外,還有一些實用的外掛套件可供安裝。

  FireFox 有正體 ( 繁體 ) 中文的專屬網站可供下載:http://moztw.org/ 。

firefox_url.png  

安裝完 FireFox  後,可以在工具選項中去搜尋及安裝您想要的套件。

firefox_addition_path.png  

只要輸入關鍵字,就可以找到您想要的相關套件。

firefox_addition.png  

若您需要開發網頁,或者是從事開發佈景( Themes ),在此強烈建議您可以安裝 FireBug 及 Web Developer ,這兩個外掛套件可以幫你快速設計佈景,與找出 "臭蟲" Bugs 在那裡。

firefox_addition_useful.png  

   Firebug 可以直接在網頁中點選您想要修改的網頁物件,如下圖的 "首頁" 連結物件;它可以快速顯示出該物件的相關資訊給您作參考,並且可以直接修改該物件相關的參數而不動到程式主體。這樣可以幫助您快速找到要修改的物件,修改後的 CSS 參數會立即呈現在網頁上,等調整到您想要的畫面時,再去修改原始程式檔,這就安全且方便許多了。

firefox_firebug.png  

文章標籤

MIS 發表在 痞客邦 留言(0) 人氣()

這一篇文章 GnuPG (GPG) In Win32 免費檔案加解密軟體概念與實作 大致說明了 GnuPG 對於產生一組私鑰 ( Private Key:secring.GPG )& 公鑰( Public Key:pubring.GPG ),與匯出公鑰 polinwei.asc 及匯入客戶公鑰 partnerid.asc 的完整過程。接下來,我們找個檔案,實際來測試看看。會用到的指令有:

加密:C:\gnupg\gpg --encrypt --armor --recipient [public key] --output encryptedfilename unencryptedfilename

解密:C:\gnupg\gpg --always-trust --passphrase-fd 0 --output C:\gnupg\Decrypt\unencryptedfilename  -u "[USER-ID]" --no-tty --decrypt C:\gnupg\Encrypt\encryptedfilename < [passphrase.file]

客戶要給我們的檔案 test.txt

He said, " I'm sorry I doubted you. Now I realize there is greatness even in a small mouse. "
他說: " 很抱歉. 我那時懷疑你, 現在我了解即使是一隻小老鼠也有他偉大之處. "

 

實作:還記得我們匯出公鑰時的資訊吧(如下)

/** 下面是這一組Key的資訊 **/
pub  1024D/FBA68168 2013-06-11 polin.wei <polin.wei@xxx.com>
        Key fingerprint = 925A 54A5 03DA 5CFD ECE5  F01C A5DC 98A3 FBA6 8168
sub  2048g/9E6074F7 2013-06-11 [expires: 2023-06-09] <=用這一組來指定 9E6074F7 匯出公鑰

而我們給客戶的檔案polinwei.asc就有這些資訊,讓客戶先以此金鑰作加密( Sign ),再寄給我們作解密即可。

 

客戶端:

C:\gnupg\gpg --encrypt --armor --recipient 9E6074F7 --output test.encryp.txt test.txt

此時會針對 9E6074F7 的公鑰,產生一個加密檔案 test.encryp.txt,內容會像下面這樣,再將這個檔案 test.encryp.txt 傳給我們即可。

 
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.2.0 (MingW32)

hQIOA0W37H+eYHT3EAgArwioRbUxmP80hO0a5il61ahLPSqJndgGbdXWa9kNE2lq
1jsTpiMPZkeJzw9zo/xE41sBhOdpIggsD1zryul9wUCHOjkiOEGGGyEnxqFUtYHH
6Ie0pfjdAguTT1Ym/rJhGveGNnsBrDnV/CkOrWcELJyRCM6WjSne4WbLPjelvC6w
UiJHjvuzJrCW6Xs6qhziFMoqE7sT7jn7xZPqlrxO22DAWJUQ9ZMJev/A5PPlbtpb
NA1loXRToJ7X7Eazh+oxa30D3Bqta7E6UPg9X4yBJfqfCIJkqjHgzeXFks7Kddd7
t4PPYGYyWbR5F6bW6QHdbwnE2WtNFHNskMM27GaznwgAvX1aRZsB+G+mGjrIBol6
XTQaDhk/hkGStxnd69zTEEhENTvHsFZ2ovsoBNtJLqoZ/k5HsETO4rYSz/KKoZLt
wvTdWHG5aVfU7k96V7NXh13JNOXiOPAWli9G9hnLqY3bZh2lENhaXt7D4fAwxZc0
LXR4mZPy1Vjvskuf2g9E5b+oqfy0LttANAaKWdH/M9Kia/skE3hbEjad/Y//vN3x
BZeOePevn3tLgQmvtapfzZz4682+s/mTDkSAOpgtSCuO3hYB1up+biIqc33dQ8Ui
u4yYaA0xWQsH+Ba2IHmQTkDLIjtFdaa6m8/afMnYR2eqg6nX7MmYjmbTXxZIt2oc
Z9LAKgE37zFFxn4wtvNbRUx8tS7B55CDoKUdl3KivQyfhXF1a9mh7zwqOzTIoIi9
bEdYHKDpEFycjpmgpUj4TPPJyOIU91X9M1cARtK7QLQbinUK0A9l/q3wADPmvCU/
uUJ/LnKoSOxJMkv3sK2Mcnp8w+RUPC6ZrQYrR8SmHo+PJqFddD0L5jtlHtQD877v
96RF32IJE3wfSZGPwXwGhsa2SdXy9d+xYcGzEowvkld0Jb3fRbZu03OmXTAOW6fY
MtjridBEWgXe4wsY2e5y/R4hIUHbLr3J8VUKPa55j3YKpeOBG4E8YMSbZ4GkhA==
=emqr
-----END PGP MESSAGE-----

 

本機端:

C:\gnupg\gpg.exe --always-trust --passphrase-fd 0 --output C:\gnupg\Decrypt\test.txt  -u "polin.wei" --no-tty --decrypt C:\gnupg\Encrypt\test.encryp.txt < passphrase.file

這裡有兩個參數要說明一下:

--passphrase-fd 0 : 是將 secret key (Private key) 的 Passphrase 以檔案 passphrase.file 方式傳入,這樣就不用每次都提示要你輸入了。-u "polin.wei"        : 則是 [USER-ID],這應該是唯一的值。
passphrase.file     : 檔案裡的內容,沒忘了吧,我們在GnuPG (GPG) In Win32 免費檔案加解密軟體概念與實作 輸入的是 polin 。

C:\gnupg>C:\gnupg\gpg.exe --always-trust --passphrase-fd 0 --output C:\gnupg\Decrypt\test.txt  -u "polin.wei" --no-tty --decrypt C:\gnupg\Encrypt\test.encryp.txt < passphrase.file

gpg: encrypted with 2048-bit ELG-E key, ID 9E6074F7, created 2013-06-11
      "polin.wei <polin.wei@xxx.com>"

執行完指令後,就可以將加密檔 test.encryp.txt ,還原成 test.txt 正常的檔案了。 您也試試吧!!

 

 

 

 

文章標籤

MIS 發表在 痞客邦 留言(0) 人氣()

  當商業檔案如 EDI (850,860,810...) 在 FTP 協定中傳輸時,若被別人截取,那資料就會外洩。若能在傳輸前先加密,到客戶端時再作解密,這就保險多了。檔案加解密的軟體很,GnuPG (GPG) 是一套完全免費的軟體( GnuPG is the GNU project's complete and free implementation of the OpenPGP standard as defined by RFC4880 . ),也有在實務的商務中使用,安全性很高值得一用。

GnuPG 概念:

GPG, like PGP (Pretty Good Privacy), uses a key pair. This means that when you generate a key, you will create a public copy as well as private copy. The private copy is your copy used to decrypt an incoming file as well sign an outgoing file (but for our purposes, we are only using it to decrypt). The public key is the key you give to the public, which is used to encrypt the files coming to you. First we will create your own key.
 
These keys are stored in key rings. For GPG, they are stored in the directory that the GPG files were copied into. They are both named with a .GPG extension, and are called pubring.GPG and secring.GPG (to denote the public key ring and the private key ring, respectively).

原文的意思主要是說:GPG 會產生一組 Key ,一個是私鑰 ( Private Key:secring.GPG ) 用來解碼檔案,以及傳出檔案時作簽章 ( sign );一個是公鑰( Public Key:pubring.GPG )是要給客戶的,當客戶要傳檔案給你時,用此公鑰作加密。兩個檔案都是以 .GPG 作為附檔名。

GnuPG 實作:

  那要如何建立這一組Key:私鑰 ( Private Key:secring.GPG )& 公鑰( Public Key:pubring.GPG ),下面一個步驟一個步聚來作解說:

step 01: 環境設定

先到 GnuPG 的下載網站: 下載軟體 gnupg-w32cli-1.2.0.zip. (ftp://ftp.gnupg.org/GnuPG/binary/gnupg-w32cli-1.2.0.zip),這裡使用gnupg-w32cli-1.2.0 版。在 Windows 平台,可以用 7Z 解壓,並將解開的目錄放在 C:\gnupg

再到 開始(Start) > 控制(Control Panel) > 系統(System). 選擇 進階(Advanced tab) 並編輯環境變數中的 Path 參數。

EnvironmentVariables  

step 02: 產生私鑰 ( Private Key:secring.GPG )& 公鑰( Public Key:pubring.GPG )

C:\gnupg> c:\gnupg\gpg --gen-key
gpg (GnuPG) 1.2.0; Copyright (C) 2002 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.

gpg: keyring `c:/gnupg\secring.gpg' created
gpg: keyring `c:/gnupg\pubring.gpg' created
Please select what kind of key you want:
   (1) DSA and ElGamal (default) <= 選擇預設即可
   (2) DSA (sign only)
   (5) RSA (sign only)
Your selection?
DSA keypair will have 1024 bits.

About to generate a new ELG-E keypair.
              minimum keysize is  768 bits
              default keysize is 1024 bits
    highest suggested keysize is 2048 bits
What keysize do you want? (1024) 2048 <= 輸入 2048
Requested keysize is 2048 bits

Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0) 10y <= 有效時間10年, 若為0則不失效
Key expires at 06/09/23 10:01:10
Is this correct (y/n)? y <=輸入y表示正確無誤

You need a User-ID to identify your key; the software constructs the user id
from Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

Real name: polin.wei <=這是 USER-ID 作加/解密時要指定用的
Email address: polin.wei@xxx.com
Comment:
You selected this USER-ID:
    "polin.wei <polin.wei@xxx.com>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O <=確定輸入 O
You need a Passphrase to protect your secret key. polin <=保護 Secret key 的密碼

/** 接下來就是產生這一組Key的過程了**/
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
+++++++++++++++.+++++....++++++++++++++++++++.+++++++++++++++++++++++++.++++++++
++++++++++++.+++++.+++++.++++++++++++++++++++.++++++++++..++++++++++>+++++......
.......>+++++................................................................+++
++
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
+++++...++++++++++.++++++++++.+++++..+++++..++++++++++.+++++++++++++++++++++++++
+++++.++++++++++.+++++++++++++++++++++++++...++++++++++++++++++++.++++++++++++++
+>..++++++++++.....>..+++++.............................>.+++++....<.+++++......
................................................................................
................................................................................
............................................+++++^^^
gpg: c:/gnupg\trustdb.gpg: trustdb created
public and secret key created and signed.
key marked as ultimately trusted.

/** 下面是這一組Key的資訊 **/
pub  1024D/FBA68168 2013-06-11 polin.wei <polin.wei@xxx.com>
        Key fingerprint = 925A 54A5 03DA 5CFD ECE5  F01C A5DC 98A3 FBA6 8168
sub  2048g/9E6074F7 2013-06-11 [expires: 2023-06-09]

PS: 若要修改secret key Passphrase , 指令如下:

usage: gpg [options] --edit-key user-id [commands]

C:\gnupg>gpg --edit-key polin.wei

gpg (GnuPG) 1.2.0; Copyright (C) 2002 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.

Secret key is available.

gpg: checking the trustdb
gpg: checking at depth 0 signed=0 ot(-/q/n/m/f/u)=0/0/0/0/0/1
gpg: next trustdb check due at 2023-06-09
pub  1024D/FBA68168  created: 2013-06-11 expires: 2023-06-09 trust: u/u
sub  2048g/9E6074F7  created: 2013-06-11 expires: 2023-06-09
(1). polin.wei <polin.wei@xxx.com>

Command> passwd

Key is protected.

//先輸入原來的密碼

You need a passphrase to unlock the secret key for

user: "polin.wei <polin.wei@xxx.com>"

1024-bit DSA key, ID 53FA0BBC, created 2013-05-23

/**再輸入新的密碼,若連續按兩次 Enter 鍵,則密碼為空,系統會告知this is probably a *bad* idea! **/

Enter the new passphrase for this secret key.

You don't want a passphrase - this is probably a *bad* idea!

Do you really want to do this? yes

step 03: 匯出要給客戶的公鑰

利用 step 02 最後的資訊(如下)來匯出要給客戶的公鑰

/** 下面是這一組Key的資訊 **/
pub  1024D/FBA68168 2013-06-11 polin.wei <polin.wei@xxx.com>
        Key fingerprint = 925A 54A5 03DA 5CFD ECE5  F01C A5DC 98A3 FBA6 8168
sub  2048g/9E6074F7 2013-06-11 [expires: 2023-06-09] <=用這一組來指定 9E6074F7 匯出公鑰

C:\gnupg>gpg --export --output polinwei.asc 9E6074F7

這時會匯出一個檔名為 polinwei.asc 的公鑰,這就是要給客戶匯入用的;當然,客戶也會給你他的公鑰,你也必需匯入進來,並作信認 ( Trust )

 

step 04: 匯入客戶的金鑰( partnerid.asc 此為範例檔),並信認( Trust )

C:\gnupg>gpg --import partnerid.asc <=匯入客戶的金鑰

gpg: key 55FA0BBC: public key "Partner <edi.admin@Partner.com>" imported
gpg: Total number processed: 1
gpg:               imported: 1

 

C:\gnupg>gpg --edit-key 55FA0BBC <=指定要維護那一間客戶
gpg (GnuPG) 1.2.0; Copyright (C) 2002 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.

gpg: checking the trustdb
gpg: checking at depth 0 signed=0 ot(-/q/n/m/f/u)=0/0/0/0/0/1
gpg: next trustdb check due at 2023-06-09
pub  1024D/55FA0BBC  created: 2013-05-23 expires: 2023-05-21 trust: -/-
sub  2048g/DD28189F  created: 2013-05-23 expires: 2023-05-21
(1). Partner <edi.admin@Partner.com>

Command> trust <= 對此客戶作信認
pub  1024D/55FA0BBC  created: 2013-05-23 expires: 2023-05-21 trust: -/-
sub  2048g/DD28189F  created: 2013-05-23 expires: 2023-05-21
(1). Partner <edi.admin@Partner.com>

Please decide how far you trust this user to correctly
verify other users' keys (by looking at passports,
checking fingerprints from different sources...)?

 1 = Don't know
 2 = I do NOT trust
 3 = I trust marginally
 4 = I trust fully
 5 = I trust ultimately
 m = back to the main menu

Your decision? 5 <= 選擇 5
Do you really want to set this key to ultimate trust? yes

pub  1024D/55FA0BBC  created: 2013-05-23 expires: 2023-05-21 trust: u/-
sub  2048g/DD28189F  created: 2013-05-23 expires: 2023-05-21
(1). Partner <edi.admin@Partner.com>
Please note that the shown key validity is not necessarily correct
unless you restart the program.

Command> quit <=離開

step 05: 檢查客戶的公鑰是否正確存在

C:\gnupg>gpg --list-keys
c:/gnupg\pubring.gpg
--------------------
pub  1024D/FBA68168 2013-06-11 polin.wei <polin.wei@xxx.com>
sub  2048g/9E6074F7 2013-06-11 [expires: 2023-06-09]

pub  1024D/55FA0BBC 2013-05-23 Partner <edi.admin@Partner.com>
sub  2048g/DD28189F 2013-05-23 [expires: 2023-05-21]

 

以上的步驟就是產生一組私鑰 ( Private Key:secring.GPG )& 公鑰( Public Key:pubring.GPG ),與匯出公鑰 polinwei.asc 及匯入客戶公鑰 partnerid.asc 的完整過程。

文章標籤

MIS 發表在 痞客邦 留言(0) 人氣()

標準 XMLHttpRequest 的操作方法如下 :

abort()
停止當前請求

getAllResponseHeaders()
把 HTTP 請求的所有回應標頭作為鍵/值對傳回

getResponseHeader("header")
傳回指定標頭的字串值

open("method", "url")
建立對伺服器的呼叫。method 參數可以是 GET、POST 或 PUT。url 參數可以是相對 URL 或絕對 URL。這個方法還包括 3 個可選的參數

send(content)
向伺服器發送請求

setRequestHeader("header", "value")
把指定標頭設定為所提供的值。在設定任何標頭之前必須先呼叫 open

接下來,再來針對各別的方法 ( Method ) 作比較仔細的說明:

void abort()
顧名思義,這個方法就是要停止請求。

string getAllResponseHeaders()
這個方法的核心功能對 Web 應用程式開發人員應該很熟悉了,它傳回一個字串,其中包含 HTTP 請求的所有回應標頭,標頭包括 ContentLength、Date 和 URI。

string getResponseHeader(string header)
這個方法與 getAllRes-ponseHeaders() 是對應的,不過它有一個參數表示你希望得到的指定標頭值,並把這個值作為字串傳回。

void open(string method, string url, boolean asynch, string username,string password)
這個方法會建立對伺服器的呼叫。這是初始化一個請求的純腳本方法。它有兩個必要的參數,還有 3 個可選參數。
要提供呼叫的特定方法(GET、POST 或 PUT)
還要提供所呼叫資源的 URL。

另外還可以傳遞一個 Boolean 值,指示這個呼叫是非同步的還是同步的。預設值為 true,表示請求本質上是非同步的。如果這個參數為 false,處理就會等待,直到從伺服器傳回回應為止。由於非同步呼叫是使用 Ajax 的主要優勢之一,所以倘若將這個參數設定為 false,從某種程度上講與使用XMLHttpRequest 物件的初衷不太相符。不過,前面已經說過,在某些情況下這個參數設定為 false 也是有用的,比如在持久儲存頁面之前可以先驗證使用者的輸入。

最後兩個參數不說自明,允許你指定一個特定的使用者名稱和密碼。

void send(content)
這個方法實際向伺服器發出請求。如果請求聲明為非同步的,這個方法就會立即傳回,否則它會等待直到接收到回應為止。可選參數可以是 DOM 物件的實例、輸入串流,或者字串。傳入這個方法的內容會作為請求本體的一部分發送。

void setRequestHeader(string header, string value)
這個方法為 HTTP請求中一個給定的標頭設定值。它有兩個參數,第一個字串表示要設定的標頭,第二個字串表示要在標頭中放置的值。需要說明,這個方法必須在呼叫 open() 之後才能呼叫。

  在所有這些方法中,最有可能用到的就是 open() 和 send()。XMLHttp-Request 物件還有許多屬性,在設計 Ajax 互動時這些屬性非常有用。

 

文章標籤

MIS 發表在 痞客邦 留言(0) 人氣()

XMLHttpRequest 重要的屬性: onreadystatechange,readyState,status, statusText ,responseXML ,responseText。  

  • onreadystatechange
    參考至callback函式,readyState每次改變時,都會呼叫onreadystatechange所參考的函式。  
  • responseText
    伺服器傳來的請求回應文字,會設定給這個屬性。  
  • responseXML
    伺服器傳來的請求回應如果是XML,會成為DOM設定給這個屬性。  
  • statusText
    返回當前 XMLHttpRequest 請求的回應行狀態,回傳值: string status  
  • readyState
    回應 XMLHttpRequest 的當前狀態,會有0到4的數值,共有5個狀態

0 = UNINITIALIZED; opennot yet called
(未初始化) Object已建立,但是尚未初始化(尚未使用open方法)  

1 = Open; send for request not yet called
(初始化) Object已建立,尚未使用send方法  

2 = Sent; send called, headers and status are available
(送出數據) send方法已使用,但是當前的狀態及http檔頭頭未知  

3 = Receiving; downloading response, responseText only partially set (數據傳送中) 已接收部分數據,因為回應及http檔頭不全,這時通過 responseBody 和responseText 獲取部分數據會出現錯誤  

4 = COMPLETED; finished downloading
(完成)數據接數完畢,此時可以通過 responseBody 和 responseText 獲取完整的回應數據

status: 回應 XMLHttpRequest 請求的 http 狀態碼 ,回傳值:integer status code

100:Continue
101:Switching protocols
200:OK
201:Created
202:Accepted
203:Non-Authoritative Information
204:No Content
205:Reset Content
206:Partial Content
300:Multiple Choices
301:Moved Permanently
302:Found
303:See Other
304:Not Modified
305:Use Proxy
307:Temporary Redirect
400:Bad Request
401:Unauthorized
402:Payment Required
403:Forbidden
404:Not Found
405:Method Not Allowed
406:Not Acceptable
407:Proxy Authentication Required
408:Request Timeout
409:Conflict
410:Gone
411:Length Required
412:Precondition Failed
413:Request Entity Too Large
414:Request-URI Too Long
415:Unsupported Media Type
416:Requested Range Not Suitable
417:Expectation Failed
500:Internal Server Error
501:Not Implemented
502:Bad Gateway
503:Service Unavailable
504:Gateway Timeout
505:HTTP Version Not Supported

PS:此屬性 status 是唯讀,返回當前 XMLHttpRequest 請求的 http 狀態碼 ,此屬性僅當數據送出並完整接收完畢後才可以獲取。

程式範例如下:

if(myXmlHttp.readyState == 4) {
   if(myXmlHttp.status == 200) {
   //以純文字方式取回伺服器回傳資料
   txtresp = myXmlHttp.responseText;
   //以 XML 方式取回伺服器回傳資料
   xmlresp = myXmlHttp.responseXML;
   if (txtresp) {
      alert(txtresp);
      document.getElementById("myTxtResp").innerHTML = txtresp;
   }
}
 
文章標籤

MIS 發表在 痞客邦 留言(0) 人氣()

  AJax 技術是目前網頁流行的趨勢,在工作上也時常運用此技術.那什麼是 AJax 呢?節錄一段 WIKI 上的 AJax 文章如下: AJAX 全稱為「Asynchronous JavaScript and XML」(非同步JavaScript和XML),是一種創建互動式網頁應用的網頁開發技術。根據Ajax提出者Jesse James Garrett 建議,它:

  • 使用XHTML+CSS來表示資訊;
  • 使用JavaScript操作DOM(Document Object Model)進行動態顯示及互動;
  • 使用XML和XSLT進行資料交換及相關操作;
  • 使用XMLHttpRequest物件與Web伺服器進行非同步資料交換;
  • 使用JavaScript將所有的東西繫結在一起。
  • 使用SOAP以XML的格式來傳送方法名和方法參數。

   對架構有興趣的網友再自行細讀.接下來我們要以實作來瞭解AJax的運作,在實作之前再說明一下, JavaScript要放在網頁中的兩種模式:

第一種:JavaScript 嵌入 HTML 中的作法,有下列兩種模式

A: <script type="text/javascript"> .code </script>
B: <script type="text/javascript" src="url"></script>

建議使用 B 為宜,因為這樣程式碼分離,閱讀及 Debug 都較為方便.

第二種:搭配 XHTML,若是搭配嚴謹的XHTML格式則必須使用 cdata 將 JavaScript 用註解格式封裝 

<script type="“text/javascript”">
<![CDATA[//>
<!— Javascript Code here … //-->
<!]]>
</script>

AJAX 處理的順序大致可以分成下列五個步驟

1.Create the object : XMLHttpRequest
2.Set the readystatechange event trigger
3.Open the Request
4.Send the Request
5.Check the readyState property

整個架構圖如下:

AjaxConcept.png  

   下面就舉實例來說明 AJax 這五個步驟,在這個實例中需要兩個檔案 AJax.html & HelloAjax.txt,透過 AJax.html 是來取得網站內 HelloAjax.txt 檔案裡的資料。  

AJax.html 檔案

<html>
<head>
<script type='text/javascript'>  
var myXmlHttp;
function createXmlHttpObj(){
   if(window.XMLHttpRequest) {
      myXmlHttp = new XMLHttpRequest();
    } else if(window.ActiveXObject) {
      myXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");  
    }
}

function handleStateChange(){
   var txtresp;
   var xmlresp;
   if(myXmlHttp.readyState == 4) {
      if(myXmlHttp.status == 200) {
    //以純文字方式取回伺服器回傳資料
   txtresp = myXmlHttp.responseText;
   //以 XML 方式取回伺服器回傳資料
    xmlresp = myXmlHttp.responseXML;
   //5.Check the readyState property
    if (txtresp) {
    document.getElementById("myTxtResp").innerHTML = txtresp;
      }     
     }  
 }
}
function sendRequest(){
 // 1.Create the object : XMLHttpRequest   
 createXmlHttpObj();  
 if(myXmlHttp) {      
  // 2.Set the readystatechange event trigger      
  myXmlHttp.onreadystatechange = handleStateChange;      
  // 3.Open the Request      
  myXmlHttp.open('get', 'HelloAjax.txt');      
  // 4.Send the Request      
  myXmlHttp.send(null);  
 }else {
   alert("您的瀏覽器不支援這個Ajax程式的功能");
 }
}
</script>
</head>
<body>
    <input value="click me(介紹 AJax 的功能)" onclick="sendRequest();" type="button"><br>
    <a href="#" onClick="sendRequest();" >click me(介紹 AJax 的功能)</a>
    <div id="myTxtResp"></div>
</body>
</html>

HelloAjax.txt 檔案

Hello AJax
這是由 AJax 技術取得伺服器後端 HelloAjax.txt 的檔案資料
文章標籤

MIS 發表在 痞客邦 留言(0) 人氣()