2016年6月28日 星期二

36 個問題

最近有空玩了這個「墜入愛河的36 個問題」
http://womany.net/read/article/6618

玩了之後覺得有幾個tip:

首先是時間要夠,36 個問題不算太多也不算太少,但很多問題的回答都需要解釋,直接了當的答案也不見得完整,例如:

Q:你希望自己出名嗎?希望自己以什麼方式出名?
如果我回答「想,跟Steve Jobs 一樣的方式出名」名人的話對方也許還能了解,但如果是「想,跟Dennis Ritchie一樣的方式出名」,這到底是什麼奇怪的出名方式呢?要解釋就要花時間,這種背景、人物無一不可的介紹,不說個五分鐘絕對說不清楚

Q:如果你能夠活到九十歲,而你能選擇保有三十歲的身體或三十歲的心靈活力,你會選擇保有哪個?
A:心靈活力。
只給這樣的答案只要3分鐘就可以回答完36個問題了啦,但這樣是要對方怎麼了解你啦,為.什.麼.啊?

試玩的時候時間準備得不夠,快23才開始,後來弄到快01才睡,有些問題也因此在中途用簡答的方式跳過,或者偷工簡料五個答案只回答三個,有些可惜。

另外要準備可以倒數的鬧鐘,Q11 和最後的凝視都會用到;就如內文所說:「雙方之間毫無掩飾的脆弱展現能讓親密度升溫」,所以回答的現場最好準備一包衛生紙,免得說一說就崩潰哭出來;也可以準備幾罐小酒壯膽,當然如果你們喝了酒會想睡就免了

剩下好像也沒什麼好注意的,找個好時間放膽去玩吧。

至於這36 個問題是不是真的有這樣神奇效果呢?
這點我無法提供什麼評論,畢竟我和對方在試用這36 個問題前就已經不算陌生人了。
我試玩的結果比較像是洩密大會…,或稱Share 密大會,平常不對旁人說的祕密都被抖出來,像是貼Facebook 一樣貼給對方;真要說這36 個問題為我們的關係帶來什麼變化?大概就是彼此間變得「可以」無話不說,既然最恥ずかしい的東西都分享過了,那還有什麼好不能說的呢?
但說回來,我是在私密空間只有兩人狀況下玩的,文中所說「真的在酒吧找了位陌生的夥伴」面對純粹的陌生人要能老老實實回答其中一些問題,我覺得相當困難,有些問題即便都到了第三部分還是很難出口,只能說那位作家真的太強大了。

TL;DR,這36 個問題能讓你/妳和對方分享許多故事,至於能否墜入愛河,我因為在河裡所以無法提供明確的實驗結果。

2016年6月10日 星期五

亂玩雜湊函數

當你學密碼學的雜湊函數時,你爸爸媽媽爺爺奶奶叔叔嬸嬸舅舅阿姨,就連你男朋友女朋友啊不對我沒有女朋友全部都會跟你說:好的Hash 帶你上天堂,不好的Hash 帶你住套房不要用安全性不足的Hash,可是說到不好的Hash 到底會怎麼樣,卻也沒人說個準。

我決定來做個試驗,來玩一下安全性不足的Hash 究竟會發生什麼事情?

首先是實作iSHA1,名稱來自 In-Secure Hash Algorithm,i之所以要小寫是為了潮偽裝成蘋果公司最新的產品,輸出長度為32 bits ,因此利用生日攻擊法尋找這個Hash 的碰撞只需要2^16 的計算複雜度。
實作就懶得實作了,自己設計hash function 有夠麻煩,拿個SHA1 然後只取前32 bits 就好了啦XD

大概就像這樣:
iSHA1.hexdigest():
    sha1.hexdigest()[:8]

現在有了這個就可以玩很多亂七八糟的東西啦,例如破密碼,我們選用一個最簡化的保存密碼方式:把輸入的密碼經過iSHA1 之後保存,因為iSHA1 的size 不夠,因此比較容易找到碰撞,即便如此應該還是比明文保存好一點,至少不會一眼看出密碼是啥XD

我們選一個強式密碼:
Y@kum0Yuk@r!G@D@!Suk!
經過iSHA1,它會變成:
0e14c36a

超短的對不對,為了這個我寫了個網頁
http://isha1-1338.appspot.com/attack1
大家可以在上面找碰撞,我還懶得找,但相信不會有SHA1 這麼困難…個屁

我用了以下的 python code,為了可以輸入還是用string.printable,而非跑全部的可能性:
for length in range(10):
  print("test string with length %d" % (length))
  for s in itertools.combinations(string.printable, length):
    h = iSHA1.iSHA1().update("".join(s).encode('utf-8')).hexdigest()
    if h == answer:
      print("Collision found: %s" % "".join(s))
跑了至少1 hr 才跑出一個7 characters length 的collision

well 我這是用Python ,如果用C 來試驗也許就先快100 倍,再加上類似Hashcat 這樣的專用軟體,還能擴增128 張GPGPU lolololol,可以衝到37336 Mh/s:
https://hashcat.net/oclhashcat/
至少這是個例子,無論用了多強的密碼,Hash 爆了還是沒用,噗滋一下密碼照樣給人試出來,現在SHA1 已經出現可行的攻擊,意即它的強度已經達不到理論上2^80 的安全強度,雖然這不表示SHA1 變得多不安全,不過實務上一般都建議改用SHA2 家族的雜湊函數以保證更高的安全強度。

2016年6月6日 星期一

字幕產生器 Subtitle Generator

六月初參加PyCon ,因為第一天開幕睡過頭了,用One Punch Man 超商大特賣的畫面做了兩張搞笑圖,用gimp 做不熟練,花了不少時間,決定來寫個:「字幕產生器」

成品在此:
http://yodalee.github.io/subtitle-gen.html

這個網頁基於之前qcl 大神所寫的「大師語錄產生器」,大體架構沒什麼改:
http://qcl.github.io/master-quote-gen.html

同時我還參考了以下的stack overflow,老實說要是沒有網路跟stack overflow,我應該寫得出一點C跟python,可是html 和javascript 我大概會完全卡住,一行都寫不出來:

上傳圖片到canvas裡面:
http://stackoverflow.com/questions/22255580/javascript-upload-image-file-and-draw-it-into-a-canvas
canvas 裡面大圖縮小:
http://stackoverflow.com/questions/2303690/resizing-an-image-in-an-html5-canvas
canvas裡寫字有邊框:
http://stackoverflow.com/questions/13627111/drawing-text-with-an-outer-stroke-with-html5s-canvas
指定input/color 預設顏色:
http://stackoverflow.com/questions/14943074/html5-input-colors-default-color

其實寫出來覺得有點對不起qcl 大神,其實就是「大師語錄產生器」的變種,應該要貢獻回qcl 大神的github 的,只是我不知道怎麼調和自行上傳圖片和預設圖片的衝突,也不知道要怎麼處理使用者決定文字在圖內或圖下時,canvas要怎麼處理,乾脆算了。

不過既然做出來了,表示好處多多,可以好好利用:
除了本來PyCon 兩張可以快速做出來

還可以玩一些其他的:


Future Work:等我想到再來寫