2012年2月21日

[Android] 圓角框的陷阱

陷阱 1. 只有特定角落要圓角效果

作法:
指定預設值(「android:radius」)為大於 1 的值,再把不需要圓角的角落指定為「0dp」;
而且預設值不可以跟特定角落的圓角半徑值相同。

2012年1月9日

密碼應該怎麼存?

最近明文密碼的話題很紅,
決定來重貼以前關於密碼編碼(password hashing)的筆記:

  • 編碼(hash)時請記得加鹽(salt)
  • 不要整個系統都用一樣的 salt,請每次都以亂數方式產生。
  • 把 salt 跟 hash 放一起,不要分開存。
  • 結合方式最好可以有變化,
    例如:由明碼長度決定 salt 的插入位置。

用 PHP 寫起來大概像這樣:

$salt = substr(hash_func(uniqid(rand(), true)), 0, $saltLen);

$hash = hash_func($salt . $plain);

$saltStart = strlen($plain);
return substr($hash,0,$saltStart) . $salt . substr($hash,$saltStart+1);

另外,理想狀況是客戶端跟伺服器端間以加密方式(如,SSL)傳遞密碼。但是事情往往沒有這麼美好,沒辦法用 SSL 的話,可以參考〔延伸閱讀〕第 3 篇提到的「瀏覽器端 hash」。

@yllan 補充

密碼不要用 md5 比較好,要找比較難算的 hash function 例如 bcrypt 可以參數調整難易度。否則就算加了鹽,md5 還是很容易 crack

@yunglinho 補充: 《How To Safely Store A Password

  • Salts Will Not Help You
  • Use bcrypt

延伸閱讀:

  1. 密碼為什麼不能存「明文」? | 我的密碼沒加密
  2. A Basic Lesson in Password Hashing - seanmonstar
  3. hoamon's sandbox: 不應該在資料庫中紀錄使用者的明碼密碼

2011年6月24日

Radix Sort 搭配 Sleep Sort(Ruby 版)

看了 fcamel 的〈運用 radix sort 的概念加速 sleep sort〉,下午試著用 Ruby 改寫,順便拿掉暫存檔。但是相同 digit 的 thread 不一定照原本的順序結束,而變成 unstable sorting;我只好又加上「依 digit 分組」來避開這問題。

2010年6月29日

IE Bug:JavaScript 字串中有 HTML 註解

IE(5.5 ~ 8.0)會將下列片段中的灰色部分視為 HTML 註解而無法得到正確的 DOM:

2010年6月23日

[Android] 威寶 A688 在 Market 上找不到應用程式

最近在 Android Market 上了一支應用程式,
但是某些手機(如:威寶 A688)卻無法搜尋到此程式。

原來是因為這隻程式用到相機功能,
所以產生出來的 APK 檔被自動地加上「自動對焦」的需求。
導致缺乏此功能的手機「莫名地」無法在 Market 上找到此應用程式。

解法很簡單,
在 AndroidManifest.xml 裡明確地將「自動對焦」設為非必須即可:

<uses-feature
        android:name="android.hardware.camera.autofocus"
        android:required="false" />

由於 2.0 以上的 SDK 才支援「android:required」屬性,
所以要改用 2.0 以上的 SDK 來編譯,並設定正確的「minSdkVersion」。


P.S. SDK 工具中的 aapt 可以查看 APK 檔實際上的 manifest 內容:

aapt dump badging $APK_PATH