Symmetric Cryptography 小檔案

Symmetric Cryptography 中文應該翻譯作 “對稱性密碼", 又叫做 “secret key cryptography" (秘鑰密碼). 顧名思義, 這個加密方法需要一把秘鑰,只有傳遞/接收訊息的人知道這個秘鑰是甚麼? 另外, 既然是對稱, 就表示加密或解密的人都是使用同一把鑰匙.

通訊的方法大致如下:

先定義一把秘鑰叫做 Keyab, 這是 A 和 B 所分享的秘密 (shared secrete).

A 先連絡上了 B.  

但 B 要知道這個人是不是 A?

所以送出測試訊息 (challenge) Tb 給 A, 意思是, 你用 Keyab 來加密看看?

於是 A 就把  Tb 加密成 E(Tb) 送給 B.

B 把 E(Tb) 解開, 發現果然和他送出去的 Tb  一樣, 那麼 B 就可以相信 A 了.

不過 A 可以相信 B 嗎? 萬一  B 是個假的, 收到甚麼都說好呢? 所以還要讓 A 送出 challenge Ta, 考驗 B 的加密能力.

B 把 Ta加密成 E(Ta) 送還給 A 驗證, 那麼 A 就可以知道 B 至少是擁有同一隻 keyab 的通訊對象了. 

這個系列的加密方法有 DES 和 IDES 等幾種.

繼續閱讀「Symmetric Cryptography 小檔案」

SAS 小檔案

天啊! 又看到一個不認識的東西. 我們的新產品要不要支援這個東西啊? 來看看吧!

SAS 全名 Serial Attached SCSI, 所以是介於 SCSI (Small Computer System Interface) 系列與 SATA (Serial Advanced Technology Attachment) 系列的硬碟.

SAS 的介面和 SATA 的介面是一樣的, 只不過它有兩個讀寫埠, 所以 SATA 硬碟可以接到 SAS 介面上.

SAS 最強的兩點也就是多重讀取功能、和類似 SCSI 的擴充功能了, 所以用在 RAID 還蠻適合的. SAS 的定位也就是 SCSI 的接班人, 只是目前還是太子的身分而已.

若是純粹比讀寫速度的話, SAS2 也在 SATA2 之上. 但是說到容量, SAS2 的最大容量好像是 1TB (Seagate Barracuda ES.2),  但 SATA2 已經到 1.5TB (ST31500341AS) 了.

  速度規格 特徵
ATA 1 PIO 0/1/2
DMA 0/1
MultiWord DMA 0
1~2 顆硬碟
ATA 2 PIO 3/4
MultiWord DMA 1/2
 
ATA 3 SMART  
ATA 4 Ultra DMA /33 ATAPI
ATA 5 Ultra DMA 66  
ATA 6 Ultra DMA 100  
ATA 7 Ultra DMA 133  
SATA 1 150 MB/sec  1 顆硬碟
SATA 2 300 MB/sec  
SCSI 5 MB/sec  
SCSI 320 Ultra DMA 320 15 顆硬碟
SCSI 640 Ultra DMA 640  
SAS 300 MB/sec 16K 顆硬碟
SAS 2 600 MB/sec  

 

光特快 vs. 光世代

我用 Hinet 光世代 (FTTB) 也已經一陣子了, 速度上倒是令人滿意. 不過最近有線電視近來搶生意. 相比之下, 有線電視提供的速度 / 價格 比勝過了中華電信. 如果 cable 可以做到 10M/2M 的話, 每個月可以省下 355 309元. 拿這個錢來貼補頻寬, 幾乎可以升級到 15M/3M~10M/10M 之間.

  光特快 光世代
裝機費 1000 (可退) 1500
異動費   200
     
電路費   550 –> 500
市話基本費   50 –> 70
優惠 -99 最新報價
  1000 7-11 禮券  
3M/756K   459 -> 422
10M/2M 850 550 -> 490
15M/3M 999  
10M/10M 1350  
50M/3M   850
100M/5M   1100
10M/2M 總計 751 1060

 [註 2008/12/17 更新比較表]

唯一擔心的是, 我家電視的收訊不太好, 四樓好多台都看不清楚. 目前中華電信申請 10 Mbps 大概還可以用到 9Mbps, 如果振道申請 10 Mbps, 實際來個 3 MBps, 感覺也會相當差.

—————————————

20081215 補充

中華電信光世代: 新客戶的優惠比較大, 990 + 50 (市話) = 1040.

—————————————-
20081216 補充
http://www.pczone.com.tw/vbb3/forum/27/ 這裡專門討論 cable modem
 
—————————————-
20090327 補充

Hinet光纖上網再昇級 年底可能推30M速率
文/蘇文彬 (記者) 2009-03-26 

若按規劃進行,中華電信Hinet光世代服務未來上網速率將包括3M、10M、20M、30M及50M、100M等速率,提供國內民眾更豐富的光纖上網選擇。 

 
因應有線電視業者競爭,中華電信Hinet今年將推出20M/2M光纖上網速率,另外也可能視市場需求而在年底推出30M服務。目前中華電信Hinet旗下已有110萬光纖上網用戶,為在年底達到180萬戶目標,以及因應有線電視昇級系統後Cable Modem上網速率提昇至10M以上速率,中華電信打算年中推出20M/2M上網服務,除吸引Hinet光世代10M用戶昇級,也意在抗衡有線電視業者競爭。

中華電信Hinet協理劉伴和表示,Hinet目前已向NCC呈報新的20M/2M光纖上網費率,預計通過後將在今年5、6月開始實施,上網費含電路費在內每月用戶收費1300元左右,預計可吸引目前約100萬的光纖10M用戶。

不過,據瞭解,有線電視業者目前正積極朝數位化方向前進,投入資金提昇網路系統,除了希望未來能提供高畫質、互動電視等服務外,也希望在寬頻上網市場以更高的Cable Modem上網速率與中華電信競逐。

以日前最先宣佈昇級至DOCSIS 3.0系統的台固為例,宣佈在宜蘭、台北縣等台固系統地方有線電視用戶提供20M上網服務,收費每月1300元,另外還提供更高速的30M速率,每月上網費用為1900元。

受有線電視業者競爭影響,中華電信也考慮推出更高速的光纖上網服務與台固競爭。劉伴和表示,雖然目前來看,還未推出的Hinet 20M上網速率費用與有線電視業者價格差不多,但未來服務推出後中華電信將另外祭出促銷價,以更低的價格吸引用戶。

另外,由於中華電信佈建的光纖上網服務理論上已可達到100M,因此劉伴和也指出,未來視市場狀況及Hinet光纖用戶推動情形,不排除在年底時推出30M,逐步吸引國內光纖上網用戶往更高速前進,並推出其他寬頻加值服務供用戶使用。

目前Hinet旗下約有460萬用戶,年底光纖用戶達到180萬戶後,ADSL用戶將從現有330萬降至280萬,按此速率發展,最快在明年上半年光纖就可能超越ADSL成為主要有線寬頻上網技術。

 

 

Linux patch 的產生與使用

假如要 merge code 的話, SVN 有些現成的 function 可以用. 不過對於兩個沒有直接血緣關係的 branch (或者說因為 merge 又 copy 把原來的關係弄混了), merge function 就會失靈. 我猜 merge code 的時候, 看到 skipped missing target 或許就是這樣來的.

此時, diff 和 patch 應該可以幫得上忙. 首先產生 diff.

diff -parameter oldURL newURL>patch_file

parameter 可能是 ruNp 或是 ruNa

r 表示 recursive 比較下面的所有子目錄 

u 表示以統一的方式來表示檔案間的不同, ‘-‘ 表示刪除, ‘+’表示新增.

N (= new-file) 表示某個 file 可以對應到同一個目錄底下的空 file, 因為這個 file 本身可能是新增或是刪除的.

p 對 C 語言的意義是: 可以比較兩者 function 的不同

a 表示是 ascii file, text file

例如: diff -ruNa oldDirectory newDirectory > patch_file

—————————————————

接著要 patch, patch 的格式是 patch -pX

X = 0, 表示從第一層目錄 patch, X = 1, 表示從第二層目錄 patch,…

例如:

cd /D1/D2/D3

cd ../../..

patch -p2 < patch_file

這樣會 patch 到 D3 這一層

__VA_ARGS__ 與 ## 小檔案

 

我大致整理出要點, 供急功近利的新手參考.

1. __VA_ARGS__ 顧名思義, 就是一個可變的參數.

例如: #define ABC(format,…)   printf(format, __VA_ARGS__);

注意最後這個分號.

2. 假如實際參數是 0 的話, 會發生下面的問題

 ABC(“%s") –> printf(“%s",);

為了除去這個逗號, 可以用 ## 來提示 compiler.

例如: #define ABC(format,…)   printf(format, ##__VA_ARGS__);

3. 由於 __VA_ARGS__ 有點礙眼, 所以它可以被抽象化成一個變數.

例如: #define ABC(format,…)   printf(format, ##arg);

4. 以上講的是 macro 的使用, 在 function 當中一樣可以用

例如: int function(char *argv, …)

這個可以用來處理 command line 參數的情況, 因為參數可多可少.

function 當中可以用 ##__VA_ARGS__ 來傳遞 … 所代表的值給其他 function.

或是透過 va_list, va_start, va_arg, va_end 這四個標準函式庫把 argv 裡面放的東西一一取出來. 用法參見:

http://www.cplusplus.com/reference/clibrary/cstdarg/va_start.html 有使用範例

http://ehome.hifly.to/showthread.php?s=&threadid=329 有原始 macro code, 也有範例, 呃…, 還有一連串的討論.

———————————————

關於如何巧妙運用 __VA_ARGS_, 在網路上的這篇文章, 有很好的介紹, 大家可以去看.

http://www.jeffhung.net/blog/articles/jeffhung/1012/