国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【代碼】JS|前端密碼,浪漫至死不渝,祝我生日快樂

這篇具有很好參考價值的文章主要介紹了【代碼】JS|前端密碼,浪漫至死不渝,祝我生日快樂。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

今天是特別的日子,我想把這篇存稿發(fā)出來。

一次缺席,次次缺席,便不再期待重逢。
也是時候,解開最后一個設(shè)計過的謎題。


學(xué)加密的同時,我恰好寫前端比較多,也有朋友找我測試他們前端頁面上的加密方案的安全性。當(dāng)時我就在想:

  1. 前端很適合展示浪漫的心思。前端是一個公開的信息渠道,單純的前端代碼具有較差的隱匿性,但是又具備極其良好的傳播性
  2. 加密具備公開又神秘的屬性。學(xué)到公鑰加密的時候我覺得這種手法真的是優(yōu)美極了:縱使一切信息都能被所有人看到,但只有發(fā)送者和接受者知道對方想表達(dá)的是什么。

公開的前端,加密的方案,說做就做。

我想到的是隱藏一段話,思維逐漸發(fā)散到祝他生日快樂。我不希望文本本身平鋪直述地躺在代碼里,也不希望同行解密后對我欲蓋彌彰的加密嗤之以鼻,所以我希望隱藏的手法多少帶一點點巧思。

這是我大二的解決辦法:

try{let key=eval(CryptoJS.AES.decrypt("U2FsdGVkX1/sZGG8RDCO08aUuolRteDh0GJRsSIBI4mUGuX9Gd7aPaV9ruxiZ/gFCLStKO9n4P9Y1EH4RELsgQ==", 'trios').toString(CryptoJS.enc.Utf8));
        eval(CryptoJS.AES.decrypt("U2FsdGVkX18903sbV5GwKO1wzwFnS9TRTACh25BIRdHGjFdkq2jd75+JYMyicx/7cgVcY4kwGLGqV6Yo0IaaWA==", key).toString(CryptoJS.enc.Utf8));}catch{;}

兩段密文,第一段自帶密鑰,其實沒啥破解難度;巧思是第二段,第二段以第一段的運算結(jié)果作為密鑰。
我把這個代碼嵌入到了我寫的腳本中:【MOOC】JS腳本|便于復(fù)制粘貼中國大學(xué)MOOC網(wǎng)站的測試題和選項。

第一段解出來是:"''+new Date().getMonth()+new Date().getDate();",代表當(dāng)前的日期。
只有當(dāng)日期符合我加密的日期時,第二段才會解密成功。

這樣就絲滑地做到了“特定時間(即生日)觸發(fā)”。
這個加密方案靈感來源于公鑰加密方案的設(shè)計理念。公鑰加密之所以能成功,就是因為其中存在一個難解的數(shù)學(xué)問題,即大整數(shù)分解。因此我就在想,在我的設(shè)計場景里,“難解的問題”可以是什么呢?我想到了一個點:少有人知道我喜歡的人是什么時候生日。

解密的結(jié)果你們自己去解吧,就不貼了。
這兩行代碼的好處如下:

對于我:

  1. 可以放到任意地方執(zhí)行。只要是JS代碼,引入了CryptoJS就可以執(zhí)行了。作為純前端代碼,它的隱匿性和傳播性都還不錯。即使換成其他語言,也就只是換個加密庫的事情,方法可以保持不變。

對于他:

  1. 足夠簡單,以致于他可以解密。一方面因為是前端,所以不管是驗證還是解密都不需要額外安裝環(huán)境,不像Python或者別的啥還得裝環(huán)境。另一方面我專門嵌入到了腳本中,如果他嘗試過安裝我的腳本、或者說看過我的博客、或者看過我發(fā)的相關(guān)的內(nèi)容,他只需要安裝腳本就可以引入CryptoJS庫,并在頁面上直接做測試了【畢竟我也知道引入CryptoJS庫對于一個行外人來說可能挺麻煩的】。
  2. 他來解密,比其他人更加容易。畢竟密鑰是他生日,換別人還得爆破一下密鑰,雖然密鑰空間才366,但是多少也是要爆破一下的。
  3. 他不解密,效果也還是一樣的。不管解密與否,反正這個代碼會在他生日那天彈出祝他生日快樂的信息。管它彈給誰了,總之它是彈出來了。我已經(jīng)教過他怎么運行腳本了,基于人類原始的好奇心,他在看了這篇文章后萬一某天突然想起,可能會在生日那天運行一下我的腳本,也不枉我的精心設(shè)計。

對于同行:

  1. 調(diào)用CryptoJS庫有一點小門檻。很多人對瀏覽器腳本只停留在使用的階段,而CryptoJS庫并不是一個控制臺能直接運行的常用庫,需要引入,因此我的這兩行代碼直接扔控制臺會報錯,需要配合腳本管理插件或者自行想辦法引入相應(yīng)的庫;
  2. new Date().getMonth()的結(jié)果比實際月份少1,比如如果今天是4月,那么返回的值就是3。即使有人試圖暴力破解,得出來了密鑰是多少,破解的人也很可能會因為不熟悉JS代碼而弄錯我究竟要幾月祝他生日快樂;
  3. AES的加密模式特別多。如果不調(diào)用CryptoJS庫,試圖使用在線解密,由于CryptoJS庫默認(rèn)的AES加密模式是CBC,會自動將密鑰拓展為256位,直接使用在線解密去解第一段密鑰時,需要先拓展trios這個密鑰,否則無法使用在線解密。并且還得查到它的特定的填充模式。
  4. 這兩行代碼是無害且無意義的。就算猜出密鑰了,知道他是什么時候生日了,也對我倆之外的人都沒有什么意義;而如果沒猜出來這兩行代碼的作用,它尋常時候也不會執(zhí)行。
  5. 就算別人完全解密成功了,我的字符串也只包含他的化名昵稱。因此除非與我們倆都相熟的朋友,其他人并不知道我在祝福誰,很大程度地保證了他的互聯(lián)網(wǎng)隱私性。

至此,就形成了:

你知道我一定會私聊祝福你開心。
卻不知道我還會向全世界祝福你。

而我向全世界公開的祝福,
僅當(dāng)你愿意了解我的時候,
才會發(fā)現(xiàn)。

這個矛盾又浪漫的閉環(huán)。

方案的確拙劣,不過確實是我當(dāng)初能想到的藏匿一段文本的、最契合我自己的方法了。
要的就是難度不至于大到解不開,但是又永遠(yuǎn)對他雙標(biāo)

如果讓我現(xiàn)在去設(shè)計肯定是盡量想辦法做到近似一次一密了?!静穗u碎碎念】

實際上,我當(dāng)時發(fā)布在互聯(lián)網(wǎng)上的大部分加密加鎖的內(nèi)容,如果他去解鎖都會更加簡單。
不過幸運又不幸的是,他一個也沒發(fā)現(xiàn)。

不過,這個方案仍然算是我感覺的挺有趣的一個,
公開分享給大家,或許可以有幸被某個路過的寫手捉到靈感。文章來源地址http://www.zghlxwxcb.cn/news/detail-858880.html

到了這里,關(guān)于【代碼】JS|前端密碼,浪漫至死不渝,祝我生日快樂的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包