怎讓設(shè)置一個14位自然數(shù)密碼却邓,盡可能不被無意中猜中?

原問題地址:http://www.zhihu.com/question/36989779

問題描述

下了個APP翘地,表面是個普通計算器,輸入特定數(shù)字后癌幕,會顯示自己保存的秘密圖片和文件衙耕。怎么盡量避免熊孩子使用這個計算器時剛按到這個數(shù)字或答案是這個數(shù)字?
注:小于15位勺远,且不得以0開頭的自然數(shù)橙喘。不含字母、符號胶逢、小數(shù)點厅瞎。

我的回答

根據(jù)題主的需求描述饰潜,這是一個口令的生成和管理問題。那么我們就需要遵循以下原則:

  • Confidential 不能使用過于簡單容易被猜到的口令和簸,長度不能過短其中的數(shù)字重復(fù)不能太多彭雾,數(shù)字不能太有意義(比如直接用題主的生日,工號/學(xué)號锁保,甚至身份證號)薯酝,需要體現(xiàn)出一定的隨機性,否則容易被擁有良好的字典的攻擊者破解爽柒。應(yīng)對暴力破解吴菠,最有效的方法就是增加口令長度,所以這里取題主說的上限14位作為目標(biāo)口令的長度浩村。
  • Accessible 必須能隨手找到工具容易生成做葵,而且根據(jù)confidential原則,生成以后也不能隨手用明文抄白紙上或者系統(tǒng)自帶的備忘錄上心墅,否則熊孩子分分鐘找的到然后就玩脫了酿矢,但是14位直接記住難度太高,所以我們可以考慮把口令加密以后進行記錄嗓化,自己記住加密算法和密鑰棠涮,或者反其道而行之,把某個或幾個能記住的object作為密鑰輸入刺覆,加密結(jié)果直接作為生成的口令严肪。

綜上所述,有一個可行的思路就是生成偽隨機數(shù)作為口令谦屑。

方案一

取一個能記住的字符串或者數(shù)字驳糯,用散列函數(shù)計算hash值,取前14位作為輸出

比如這個就可以取60354186872526

再比如這個可以取32993841519355

覺得生成的數(shù)字太湊巧的話也可以換個熟悉的單詞短語再算一遍氢橙,直到生產(chǎn)滿意的為止酝枢。

方案二

找一張圖片,比如你喜歡的CP的同人圖悍手,用MD2編碼生成數(shù)字指紋作為隨機種子帘睦,用這個種子生成一個14位的隨機數(shù)作為口令。
如果需要得到這個口令坦康,再用原來的圖像按這個流程走一遍就行竣付。

我們可以事先定義一個函數(shù):

ApplyForPassword[x_] := {
SeedRandom[Hash[Import[x], "MD2"]];
  RandomInteger[{10^14, 10^15 - 1}]
  }

這樣需要口令的時候調(diào)用ApplyForPassword["path"]就可以得到這個14位偽隨機口令(其中path為圖片路徑字符串)

方案三

隨機生成一個14位自然數(shù)作為密碼,使用隱寫術(shù)(Steganography)將密碼偽裝成看上去非常普通的圖片滞欠,需要再取用這個密碼的時候恢復(fù)其中的信息古胆。比如這里有個已經(jīng)完成的隱寫術(shù)代碼方案可以參考一下:

偽裝過程:

恢復(fù)過程:

這些關(guān)于隱寫術(shù)的操作也可以被封裝為兩個函數(shù)。
偽裝函數(shù)(第一個參數(shù)為載體圖片筛璧,第二個是密文):

StegCover[Carrier_Image, text_] := 
 Block[{CarrierData, TruncatedCarrier, pixelChannels, SecretBits, 
   LifeLength, SecretData},
  CarrierData = ImageData[Carrier, "Byte"]; 
  TruncatedCarrier = BitAnd[CarrierData, 2^^11111110];
  pixelChannels = Apply[Times, Dimensions[CarrierData]]; 
  SecretBits = 
   Flatten[IntegerDigits[
     ToCharacterCode[
      ToString[text, InputForm, CharacterEncoding -> "ASCII"]], 2, 
     8]]; LifeLength = IntegerDigits[Length[SecretBits], 2, 48];
  SecretData = 
   Fold[Partition, 
    PadRight[Join[LifeLength, SecretBits], pixelChannels], 
    Reverse@Rest[Dimensions[CarrierData]]];
  Image[TruncatedCarrier + SecretData, "Byte"]]

恢復(fù)函數(shù)(參數(shù)為偽裝圖片):

StegUncover[CoverImage_Image] := 
 Block[{SecretData, LifeLength, secretBytes}, 
 SecretData = Flatten[BitAnd[ImageData[CoverImage, "Byte"], 1]]; 
 LifeLength = FromDigits[Take[SecretData, 48], 2]; 
 secretBytes = Partition[Take[Drop[SecretData, 48], LifeLength], 8]; 
 ToExpression[
  FromCharacterCode[FromDigits[#, 2] & /@ Take[secretBytes]]]
 ]

這樣需要使用的時候就可以直接調(diào)用StegCoverStegUncover了逸绎,就可以把任意文本(甚至其他形式的內(nèi)容)隱藏在任意圖片中了惹恃。

當(dāng)然這個方案也有很大缺陷,就是降低了資源的利用率棺牧。比如蘇教版語文第七冊一篇課文的彩色插圖巫糙,508*715像素,有RGB三個色彩通道陨帆,以我們的方法完全可以存儲508*715*3/8=136207個字符曲秉,而這里如果僅僅用來存儲14位密碼(+字符串終止標(biāo)識‘\0’,一共15個char空間的密文)是嚴(yán)重浪費的疲牵。中華人民共和國香港特別行政區(qū)基本法 (豆瓣)全書一共55983字承二,即時假設(shè)全部為2個char長度的中文字符(ASCII編碼),那么也只需要111966個字符的空間纲爸,再用于存儲長度的6個字節(jié)亥鸠,還剩24235字節(jié)是空余的,我們的方案這時就顯得有些殺雞用宰牛刀了识啦。
那不妨偏個題负蚊,這樣有個好處就是這樣的方案可以隱藏非常大的信息量,一篇GettysburgAddress放進圖片里簡直毫無感覺颓哮。生成的偽裝圖片也可以通過存儲為png或其他無損格式的圖片在網(wǎng)絡(luò)或者別的平臺交換信息家妆。

彩蛋,猜猜這張圖里藏了什么冕茅?

(未完待續(xù))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末伤极,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子姨伤,更是在濱河造成了極大的恐慌哨坪,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乍楚,死亡現(xiàn)場離奇詭異当编,居然都是意外死亡,警方通過查閱死者的電腦和手機徒溪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門忿偷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人臊泌,你說我怎么就攤上這事鲤桥。” “怎么了缺虐?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵芜壁,是天一觀的道長礁凡。 經(jīng)常有香客問我高氮,道長慧妄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任剪芍,我火速辦了婚禮塞淹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘罪裹。我一直安慰自己饱普,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布状共。 她就那樣靜靜地躺著套耕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪峡继。 梳的紋絲不亂的頭發(fā)上冯袍,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音碾牌,去河邊找鬼康愤。 笑死,一個胖子當(dāng)著我的面吹牛舶吗,可吹牛的內(nèi)容都是我干的征冷。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼誓琼,長吁一口氣:“原來是場噩夢啊……” “哼检激!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起踊赠,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤呵扛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后筐带,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體今穿,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年伦籍,在試婚紗的時候發(fā)現(xiàn)自己被綠了蓝晒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡帖鸦,死狀恐怖芝薇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情作儿,我是刑警寧澤洛二,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響晾嘶,放射性物質(zhì)發(fā)生泄漏妓雾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一垒迂、第九天 我趴在偏房一處隱蔽的房頂上張望械姻。 院中可真熱鬧,春花似錦机断、人聲如沸楷拳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽欢揖。三九已至,卻和暖如春奋蔚,著一層夾襖步出監(jiān)牢的瞬間浸颓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工旺拉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留产上,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓蛾狗,卻偏偏與公主長得像晋涣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子沉桌,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 所有貨幣都需要一些方法來控制供應(yīng)谢鹊,并強制執(zhí)行各種安全屬性以防止作弊。在法定貨幣方面留凭,像中央銀行這樣的組織控制貨幣供...
    Nutbox_Lab閱讀 3,076評論 1 3
  • 前言 《圖解密碼技術(shù)》一書介紹了很多關(guān)于密碼的知識佃扼,通讀一遍需要不少時間。為了方便學(xué)習(xí)蔼夜,我對書中關(guān)鍵的部分進行了總...
    咖枯閱讀 7,149評論 1 25
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理兼耀,服務(wù)發(fā)現(xiàn),斷路器求冷,智...
    卡卡羅2017閱讀 134,601評論 18 139
  • 我的天 幾多風(fēng)云變遷 我的天 一生往事如煙 我的天 雨來地上淹 我的天 雷鳴誰喊冤 我的天 誰說山中住著仙 我的天...
    文山鹿閱讀 178評論 1 2
  • 李奧尼德·阿夫列莫夫(Leonid Afremov)繼梵高之后瘤运,當(dāng)代最著名的現(xiàn)代印象派藝術(shù)家。 【雨夜中的情侶】 ...
    杯酒可獨酌閱讀 3,157評論 0 3