Projects STRLCPY link-lock Commits a5f61d62
🤬
  • ■ ■ ■ ■ ■
    README.md
    skipped 7 lines
    8 8  ## About
    9 9   
    10 10  Link Lock is a tool for encrypting and decrypting URLs. When a user visits an
    11  -encrypted URL, they will be prompted for the password. If the password is
    12  -correct, Link Lock decrypts the original URL and redirects there. Otherwise, an
    13  -error is displayed. If a hint is added, it is displayed right above the
     11 +encrypted URL, they will be prompted for a password. If the password is
     12 +correct, Link Lock retrieves the original URL and then redirects there.
     13 +Otherwise, an error is displayed. Users can also add hints to display near the
    14 14  password prompt.
    15 15   
     16 +Each encrypted URL is stored entirely within the link generated by the
     17 +application. As a result, users control all the data they create with Link
     18 +Lock. Nothing is ever stored on a server, and there are no cookies, tracking,
     19 +or signups.
     20 + 
    16 21  Link Lock has many uses:
    17 22   
    18 23  - Store private bookmarks on a shared computer
    skipped 1 lines
    20 25   Pages](https://github.com/jstrieb/urlpages))
    21 26  - Send sensitive links over public or insecure channels (e.g., posting links
    22 27   to a public website that require a password to access)
    23  -- Simple CAPTCHAs – particularly effective against basic web scrapers that do
    24  - not respect `robots.txt`
     28 +- Implement simple CAPTCHAs – particularly effective against basic web scrapers
     29 + that do not respect `robots.txt`
    25 30  - Add a password to shared Dropbox or Google Drive links
    26 31   
     32 +Link Lock uses AES in GCM mode to securely encrypt passwords, and PBKDF2 and
     33 +salted SHA-256 (100,000 iterations) for secure key derivation. Encryption,
     34 +decryption, and key derivation are all performed by the [`SubtleCrypto`
     35 +API](https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto). The
     36 +initialization vector is randomized by default, but the salt is not.
     37 +Randomization of both the initialization vector and salt can be enabled or
     38 +disabled by the user via "advanced options." The salt and initialization vector
     39 +are sent with the encrypted data if they are randomly generated. The API is
     40 +versioned such that old encrypted links will always work, even if later
     41 +versions of Link Lock are updated to be more secure. Please read the code
     42 +([`api.js`](https://github.com/jstrieb/link-lock/blob/master/api.js) in
     43 +particular) for more information.
     44 + 
    27 45   
    28 46   
    29 47  ## Examples
    30 48   
    31 49  - [Regular link encryption](https://jstrieb.github.io/link-lock/#eyJ2IjoiMC4wLjEiLCJlIjoiRkVJR0FzdE53NXFzM1N1N0pVQUtlOEJpWWtYWERaU012WmFDdWxZYWo2eFJzY2lDRGJXd3VZRmFkdVpqbEN4UDN4S0lWQXRoMmJHcjhHWUciLCJoIjoiXG5QYXNzd29yZDogaGFja2VybmV3cyIsImkiOiJBOWJMZkFKbXJ1RFplWktJIn0=) - Password: hackernews
    32 50  - [Encrypt entire
    33  - pages](https://jstrieb.github.io/link-lock/#eyJ2IjoiMC4wLjEiLCJlIjoiRXQ4M1gxbktlM0hyRTNVM2pZaUl0Q2c1WGFWeGNVbW1WMkpSYkxZWDlSc0RVcVM1MWZTNllYSUZGOUdxN0JKdEJxdWYwanh4d1JEWnQxMno4QTh4a2VBM3p4eXpPTis3N0o0c0NqanJhYkNwYnBuQW5mRW5aWktRZzk0ZmVVVHlPczhPWmNUdllPcVZCQ3ZqckQvQmxqRUhvWC9pazZDWm1hbTZNc3U4dDA4VGp4UXU5V3NUNFV3MHJpZTRsQXBmYmg3ZVk5Z1l2TVljcXhFVE55UEdoOW12b0RDcE1jdDVVN0NLUlJtSnlqbERtM2UvaVZuK3BWOURGYytPY0gvUk9WTlpzVXhWbkt2UHNwNmNiMFFrM21aazhkblppSmdKKy9pM3VNd1VzcmRjRmljRnFINlR5SUNVLzZNbk8rS1VzTG5oMTR4NTdIMDJ5N0xPN0hwckZuUTd5N3lCajg4Q29MNkZsa083TGZ1c25iSFBNYUdmM3R0RTRaMVprc0VLdkUrOWQxYlEwdUFRVnNOVzNyc0ptcyt4aWxNZll6QnJlNmZBRlRRRUo3c01RbndBcGZFU2J4TFFpVXRjRXVKOTc2cHdneHhpTExtTzY1N0o4MWsrT3phenJLbjZUNGUvN2VqMlBQd2lBUDIwdWFIM0lYc1gyOGZMUDdYM0NCM0drQ3o4OGRFVXo0b3Ara0dISDBSTnJ4cVpkRlpEU21TN2l2SzNQU1kzMTcrdnA1MWRjYmNVeHNrSTcwVUhULzBCYzBQVTFxRG8yeEdXbDdzQnZpM084S0Z0a0FqYVpFM01MV3VMTkt0cUNhN2xRc2RsQWdxTEtGU1FRTmYvVFVHNlFuN1JDV1FvUGpIMnJ6RVdUL1NCQXl6N3Bma2RZc0szV21mRW03engyQzFOOXB3dWU0NWRWUHFRYUpCTnlyU29uYUQ5eW1OVGI4UWJ6NGh5bW9yMlgxL290RytlbWtwVUtDSzBTREtDQ29ZbkZDcnBmb2JqV09Qa21WRmw1N3Rza0VVWXlpVXhBZklyZ01sY29EbzdSVFU4a29YdzhhVm53NXhISFN2Tk5RYmlXdWlhUWNqVG1RZFV2N2VjSVVxUzM2UHFMeFdYU3RFdFRZeEQzQlFVSzQvcnZIQUMyeFRqOG9zS2xwSWN4QjJsanZ3cWVLcHJDeU1KdVViK1IvcHFIMHhSZ0lySGdkNFNINkxkQ3RURWN5L2JEUkxWN1JnK2QwdzlTUkxPUm1xNU5kUlU5bHNrUDFBUUtua3ByQi9RZ2pra1V4OFRqQWN1NGV0b3B5d2t1TE5JbEREVDdVWGZLYTRWTHd4RFlGR0xheXFTMk0xS05BN3ZtWGFoRUlBSXQzSlN5N3pMbDNkZEFDUXhRRTl0SWFCNUUycWxJMForaHFzLzZqOUQ0alVvdmpHUmRDTUZ4QVdoZ2ZYZktyUDRJUmpPZEMwK2N1UTF6WjR2RUZMTWJxOXRrczZQVVVvT3QvbGlzcG5mWUE3d2szVjJ6dHFvN0pDUGhSMldwUXRqVGhyQnJ3ZzhwZnd0SUNRa2pHc1JOV2JpeHQrSThHQ0dtYm9xcXQ4SElWOEk4SE8zNkhSQVRzU2p0SE5sbW55ZjRSVHk5MHpLM1JCK3pnUDZyMnY0dCtueU5pQk5hejhheGR5eEtSUHNDYmNvMXdjTjBSa3QyUFNUWEt1cmVYWjArVmFKaWQxeTFVRExMUUgvNGN1MkJ3eVBPT0FKZUFDekxLZnhvbkJ0ekY1ZkNqQ1ZiT2I2a0pVYUpHTUpoWERQWXBRanBYTERTdCt1Z0Vzd3JtbCs0Z1RuejY0Rm5oL0V3L3ZYb0xHdnYvNnpydFhSUlkwdFZseGZhZ0MzbEZ4Rkw1WFJVYnNrY3krc0Fac1NaY0JnT2tTUjh2UW8vNkw2ZWJEVlBFdmkySzA0ejFKM1VDRHdZTElKM2VOMjB2S05wRllNb1gvM0c2TERJM0R0V09NR2JLZXVSRERyOTdIMVd2KzBiWHFZZ0htdVp5R2NmUkFSdmx3eGRGVFpSQ1BQZU1lWUI1eXlXY3ZSRFlYTlRFR05Qcjg4KzI4Mi8xRlBEWE5xODFtZmMwdU13TXo0QUNvdEd1YlVkalcyNng1Mmh4dEE2SEhxaDdIb3V1Nk4xNytRb3k5bnFRY0tLVjZySk1iZStoaGtKWXlBOU5uZ0k2ZTY4dlU5T1hiZC9DYitVd0E2UVdKQlUyWUpjN0RhaTY3TEFycmtKeUdxUFM5NUdRZmtsUFlpV3JwWjhuRlB2QmY4QTYzN1REekJVU3V1OHlZSXRWencxa05lTkk2ckZjY2xZdz09IiwiaSI6IkdjcGVDUzJ6OUF2MXhtQXYifQ==) - Password: urlpage5
    34  -- [Use as a simple
     51 + pages](https://jstrieb.github.io/link-lock/#eyJ2IjoiMC4wLjEiLCJlIjoiWWhjbG0xeE9uZTJWU2tvc3N1WERwKytyN1lscW1nMVNNemRoSUVER2xVZVBTUFZ3MFA3WTVwQXdnVFVKZkt4WHJ4Nlg1KytCU09RNlVTTlI3M244VEdTeWJGMmJFTG5wc0x6WVRtZnQ3aDFZSzJ5VW16TEpBTk5VOThqZFMvTVFNUG93cWdoRjVUVnYyRWF1VkVHVVlJeE5iT3BtaldCNWJyMWpXemMyakJTNUxZVGVSajNTbVI5UWNwWlRWWmVrbit4Rzd3VzNIcEttRTdVRWNtbkhZS2dydGVmaHp5eTJGNVd6N1NKSm55OTJPWnJUOEFHUE9XY3JUbmxYV0NsTDB5QjVsQmZnUTJkcHk4Y3RmMHNvdVlvb1l2LzQ1U3krZUNtdHl2WkVDd25IeUhwUForamxsaDhuNUV5U2N1ZVRWTmRtRmlmOFBhM0FtdUpQOTdTYWZXbzNwbUo4cU40UFYvMllQbHlwSGFtTmI1dnBBQkc2cU1yUWlLMVp3WHBUSnF4OG9NNFdVVGh3L3B5S0QzOWRNNml2RlNzQzVRUWpaVHl0ODlSNDNVOVdkRDVMWHprdlZ1bVpNSmM2WDExTkI4V0ZSKzdyOGVvVU8wR21rRkxTU0JlaDJickt3bzkwWjRlZkJHTkZiYWE2dU9SWnQzSm1YU0NSSGZyclVRQ053cU96R2pCKzBYZHJFeC9NbHd3QkFKNTIvY0EraW9IUDk5RkszUDN1MlN6Sk1uQzVVSFg1NGNDd1Z2dWdiMzAvUmNsMjZvZzFxUDU0NWJlMGFiak9wYnZ5aFp6RjhkdDNUUjJFLzBMY2dUQUg4dE5wSVAyYzJoM2d4NlJEQUNTZ25LRzlteW4xdFU4Y0IwbWMrd1NPdkxIRlVXVXhIYnpGSkR0aS9MSDg1RDFvdVRNWTFjM3BsSSsxRFFROG5lbjVrR2hmRUhELzdsSFhIY1ZWTHNCbi9HOTFJZU02T2pTeS9aZFcySGZ4d050VzR2WEE3em1FdjhYRDNHL3M2ZTVqdVdQWjV3ck5JWFdzcDVROHdUSlI3U2JQUi94VDNwUUZncW9LaDF2OXVEWGZBaE5xYStXaElzNTlaR1UzdFlkRVFOZEVLdGpIcnF1bzJkcVpuNnB4eTU1ZDJiOVBrcFRLNGh5TEtDOEc1TmN3TEE3dUIzYTNlNlZ2NjVVVHcrdS9oWTBoMy9Nb3ZJaERmT3k2aGZiN2FQaEIyMStxSGZSeWt2VlFPUFZrbE41ak5EK1hKZURialgvd0NUWXJJVm0yOFZkTHppZURob2ZpRGpJRjdyakFQNlF6dWJjaGJYRGFtbFZQWUhOaGVNMWdTeGROSGw5a1lRVE5kbjA1WlcvbVhXNkQwbHk0VkwrOHRwZzdxQjU2YTRyL3lIWHA0Q0tSUkdIaEVWQUptbmh2ZnBaWE11QWdneGVoSkRibVdVKy9VMUgwM2JicUZub2h5R0VGRUxQV2JjZ05kdDJwWU1Cdy81TVNqSkdWWWRPQk5nTUsxbHA2ZVRxRGhwTVdJT2E4a1dSYWx3RzV1bDhuQjhnUVBkcXBCYVdxc3I3V242SVZoZHdLc0FvTGtsdTlnL0JoelNlZEQxRjcyblprN2tSS2l3a3BJbVhOeW9TQk1SSFJSMURjSm9qdU1ZVWlrZ2JxM0dpR2ZqNmMwTTBlU2lyMlhJRnRCTzd2VkJyRmpZL1pvVnJBQ1kwTzJ2UVlGcHovaEprNElKN0daOUpmc3U4ajl5Umc5S3IrNFU3MFhoZHRLY1VYeEtrbCt1VDBtN1owb2puR0xWOGRtampzTVdna3ZhV0FYNkJpK3cycVJKYnVYRW5yUEN5dUZGODhiZ2k3UDNYUVhOMHZTY3h2Uk4wVktKQ1MvR2RVWTJsZ0lDSXVBWFlUVE9KTGNsRkJPQWxialRmZThoTG5saTkzQm4xcnZOamhnM0Y2UkJ2N3NQOTlzODlGT3pwcEZHeHVKS1RhNEg4Y2NSRmxMWDBWbE9kR0RhNWM0NGVTdzh5dCsxWWJndDlvMlExcWNSYVZsaVdadSs5VjdxM1pqcWIxcDdKb2FUN0pDQ1U2ZXR6b0dJWjBQT1JqL3pVNUlVQkRjYXdHZWszZ0djSDBLdDcxa1NSN0F2TWRYeTR3WVI4ZmdTTlpoR3gwSTZYczZ5Vy9oWFB1WERPRjNHTVBTRFFmNGNhUjBuc3pmYTl3MXdGMzVSYktodEVkZnIwU0NLQzhIRXFzNWdsQ0M4RmIxN04wbGtBVlFwSWFRRGJrN254TjVINEFhQ3RKbU5JNHFYUDhocUV6aVhySGhhZWNzNkVBUDBvdjg2cWp4dz09IiwiaCI6InVybHBhZ2U1IiwiaSI6InJNZ2xiSEpzK3pSL2dteFAifQ==) - Password: urlpage5
     52 +- [Implement a simple
    35 53   CAPTCHA](https://jstrieb.github.io/link-lock/#eyJ2IjoiMC4wLjEiLCJlIjoiZEx3Yi9CNitlK0ZjM1B3ZURrbUY2NjdQWFlIV1dsS3dpclhvZmkvRXBFTXU0ZERlVkJuSmUrN1loS2JxQ3RrPSIsImgiOiIxICsgMSA9ID8iLCJpIjoiRDJYd1MyK1EzaHpuUDV1NyJ9)
    36  -- [Emoji support](https://jstrieb.github.io/link-lock/#eyJ2IjoiMC4wLjEiLCJlIjoiakZUZDF5REdIeWtXZHQxWWVOUHB0dE9XWWxudm16MlpsZ3NMUkk1YWt5UndzVGNqcEZoNmd0QU1BQlZEcy9tLy9tY3kyOWZNR3BIMjd2dXkwbENOSG1TdWNySmJpUzkwODV2bHEydEJ0OWhGeGY0ckYwT09oa2szelRNVWpjRndRSVZwM2JYODFJTElOdkxqcGUrWXpsY3QwZXIvUnkwSy9DT0tTRGpsUnIxSHlpTTQzU3plMGZUOXJmTGFlem9jYnM1TGVXV2EiLCJoIjoiXG5QYXNzd29yZDog8J+lkSIsImkiOiJLQnJhQXV0eVU1S3RzUlFjIn0=) - Password: 🥑
     54 +- [Emoji
     55 + support](https://jstrieb.github.io/link-lock/#eyJ2IjoiMC4wLjEiLCJlIjoiU1ZBemc0NUVoeXJMR1hXYmRUMXpLSFFIa0hiR2F3SzlMaWZzWW5SL0ZiaGp1cnZqMGg5VTE0bG9kVGs3S3B0TjdhcjZ2T3FvRjJLNkxMcDByL05PZE5nUTJ3UlhVOWM2RmFJdXNGajdrNkFkTC82OVJ6dmlFV2R0dWVacFM1dS9SN2w4L3Mzc1pMTVJNeHdhTVhVenYxTjZUVkdWTGloaXc3ZXlGY093Nkp2ZVN3aGl0OW9XWW84Yk9CMkpkTTF4ZnFRSGExbEoiLCJoIjoi8J+lkSIsImkiOiI5L3pmdHFmeHdoWFh4bDc4In0=) - Password: avocado
    37 56  - [Riddles in the dark](https://jstrieb.github.io/link-lock/#eyJ2IjoiMC4wLjEiLCJlIjoiYkV5TzZDZ0VwVXZOU2xucWZiQlo3YUdYa1pSL1lub00vekJNaTBMS1VQRXVicktJQTBhS00zNkNEK0tDWXYxd3l0L2dxWTFMS0NPQnFLTldSSEpsYXVodEQ4L0dKVkU3eTFnb2JZalRmcXFtWmpRQTlVMmNhL3dJb2JvMk5DdENnWTZYMHE5MHJzZDk1L0Z6K2orNGlYSHJBa2htN01kL2pJRnNIeDIwZlNVTEFadUpyNjF6TTRucS9nQTZNcW9OS1VKaUxpSWdEakdUd0dhRmdER29OdHJ5Kzd1cUtVbW1BbWQvbWlISERqRDY3bjRtSDA5eWtndlIyVnkzanRsdU44S0puMWdkYWlTeGQvWVhXcUR2WUhrMWIzOVFlSnlIYUV5Q3ZlQkJoQ1RzZDVJbG1obU45WjB0UTdoYUpGVUl1R2hxOTNrOC82MDhpbUxKR0p0M1VNbHRHcEZJck9wUGJuSTlSVkg4WGhwVFh5aEc0Q0ZWajNNU1FGWHdLOXRkc1M4MGF0VGc1MXliZHBEcVIwV1dtWHJBN0hIQ1RCV253WEQ4SGR3SWZidkNmR2s2aW5ZajRHaHpjYUJ4UmV2c08xaGs0M1FmblQya0JHSHhBd0JqQkZTeVlrWCtldGlINHhVVFY3L295ZWtINWxzMmFSczZxc290RDNhS25jWDR3dm1VRUZNKzd3d3Z0UTlhUSt0NFprUWNyWmxGOFBUSVNRRmN3M0ZDMG5zREt1b2lHWWx1S044SGk1dW1QVjZvSC91ckdHSFJBd0VmWDg3VDNubzFBOHRJaEFhYURjSnBpQ2xvZERId3FYOWZmZC9US2JWVUd3a0cxMHdERGN1QUMrR3lJZUVNWExpR2VtNC9DSWNINnRRNTV1UGRZTmZ2aTVuNkU3UHZydFhOSkh5a21jdHpSUVZlSGlOeXp4TDZNY1BSSmZqLy9xZ0dWSWQ0M3Z6aFJBZDFzZHpYa1ZtREhJNFpneDBrQ3dxd05FUllLU3JTNGIwdmV3c3dOQjRVa2lIUFMwMDFpUjVCNG1hUjAvMkhhSFJnWjNMT0RFU1U4djdVNVhrUHllNC85WTZmY3BNeDdWRXg2OUYrem1GL1JsNml3bU1FYk55Ry9YQlU3bERGYXB3Uk1HUmExLzNSTWRObzFoVm5oQ08rNzRMNkxRQlNBSk04VldiZUE2bXVydG1vVHpxb2gvaWtqckxHKzFGUUVvM1lSMnhwQ1VlWVhxOXFSK2YwRGFCM3d4NFk4S0IrcmdUelhLc1JDZXBCTHRjVkhtcFV5UW4rdWswVitDZ0RCOXlPSkJFSXpYSmNnUWxHVlMyOGF4RjFmTnR4UTZkbzdiTU5xbFlqN1RvVzhaQ1NNU0JOVFU5cU92dlNESFBxTFZZOXEzYlhhc3gvZDVwRDBiTzdHTzVsdjlubm91MTZHNUpVTFRlM2IrN0I2azFpZFE3akd0VDFmOTNhUEg0bzZodWlLQXBZdVZQOVJjVHBHVlVyd3dhMzlPcFF4eFNJS2xxeW53d0xwZGxOMjJ0NUJIRm92c1IyUkZCeDhXTFA1a0tuNG9HdTJJcDVBVThDeGs4MG5GZ2VjUGIzS3RuL1lteHJqTVNVVkxmSXMyVUxmbHhqbkE5Q01aWi9ZdG0zZXpFc0VveU1wM3FZWnN1SGh4Rld2ajZXalFkUXdxRXlHY2Z6ZG94dDFvTXh1WVB3ZjF3N3JxWlR6eDVwVkptRGZ1V1VDUUxub2c5c0RqWmRKSHhZVTRadCt2NEYrRDJXdlZ1c0FZSzNJRGJZSnQzOWxSRUxXcUp4dkpaa2pHeXdSaWo1OGsvUzZtTmg0SnJaTk5hNmZFT08rcjU2U2RMcHI1dmh3enorbjFURExiWWZILzdsU0xvc0VaZk4vMFQyOFBrdlJEMlcrMnVvWm5QaVFRV2FnQXdIcmRCc0UrUjdEbFNsdnJWNmJtN0tuSlBWc2NqbXRVVlc3SXBDZ1NNMWh4QWhSZm5hRDJucGdRMmVocUhJZXFlZkpFc281WE1pVDNiWVUwRS92WVdSaHROMTJWdkwxa0k2ejA1UlR3PT0iLCJoIjoiVm9pY2VsZXNzIGl0IGNyaWVzLFxuV2luZ2xlc3MgZmx1dHRlcnMsXG5Ub290aGxlc3MgYml0ZXMsXG5Nb3V0aGxlc3MgbXV0dGVycy4iLCJpIjoiWW91TVFyMmJXRHdGMW1BVSJ9) - The password is a single, lowercase word
    38 57   
    39 58   
    40 59   
    41 60  ## Disclaimer
     61 + 
     62 +The code was written to be read. Please read it, especially if you don't trust
     63 +me to build a secure encryption application. In particular:
    42 64   
    43 65  - I am a college student, not a security professional – there may be
    44  - best-practices I am not aware of.
     66 + best practices I am not aware of.
    45 67  - Once someone decrypts a link, they can share the original URL as much as they
    46 68   want. Only share encrypted links with trusted people.
    47 69  - I am not comfortable using JavaScript, and I don't have a firm grasp of the
    skipped 3 lines
    51 73   a subtle mistake somewhere.
    52 74  - Most of the encryption/decryption code is based on [MDN
    53 75   tutorials](https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/deriveKey#PBKDF2_2)
    54  - for the `SubtleCrypto` API
     76 + for the `SubtleCrypto` API.
    55 77   
    56 78   
    57 79   
    58  -## How It Works
     80 +## Usage
    59 81   
    60  - 
    61  - 
    62  -## To-do
     82 +- Create a locked link [here](https://jstrieb.github.io/link-lock).
     83 +- Use the advanced options when creating a link to make the encryption more
     84 + secure (at the cost of a longer link).
     85 + - By default, the initialization vector is randomized for security, but
     86 + this can be disabled, even though doing so is a vulnerability.
     87 + - By default, the salt used to hash the password during key derivation is
     88 + not randomized, but this can be enabled.
     89 +- To bookmark a locked link, drag it from the output box to the bookmarks bar.
     90 + Alternatively, visit the locked link and bookmark it before entering the
     91 + password.
    63 92   
    64 93   
    65 94   
    66 95  ## Acknowledgments
    67 96   
     97 +Thank you to those who offered feedback on this program before its release!
     98 + 
  • ■ ■ ■ ■ ■ ■
    create/index.html
    skipped 66 lines
    67 67   <!-- Project description -->
    68 68   <h1>Link Lock</h1>
    69 69   <div>
    70  - <p>Link Lock adds passwords to links. Enter a link and password below, and click "Encrypt" to generate a locked link. When someone visits a locked link, it will not unlock unless they enter the correct password. If the password is correct, they will be redirected to the original link.</p>
    71  - <p>To bookmark a locked link, drag it from the output box to the bookmarks bar. Alternatively, visit the locked link and bookmark it before entering the password.</p>
    72  - <p>This application uses encryption to make it nearly impossible to recover the original link from the locked one. This means that a lost password will make locked links unrecoverable. Randomizing the salt and initialization vector in the advanced options will make the encryption more secure at the cost of a longer link. Read more about the encryption used on the <a href="https://github.com/jstrieb/link-lock" target="_blank">Link Lock GitHub repository</a>.</p>
    73  - <p>Link Lock runs entirely in the browser, so nobody can see the links you are locking and unlocking. No data is ever stored on any server. There is no tracking, no spying, and no cookies. If you do not trust it, read the source code, or run your own instance.</p>
     70 + <p>Link Lock is a tool for encrypting and decrypting URLs. When a user visits an encrypted URL, they will be prompted for a password. If the password is correct, Link Lock retrieves the original URL and then redirects there. Otherwise, an error is displayed. Users can also add hints to display near the password prompt.</p>
     71 + <p>Each encrypted URL is stored entirely within the link generated by the application. As a result, users control all the data they create with Link Lock. Nothing is ever stored on a server, and there are no cookies, tracking, or signups.</p>
     72 + <p>Link Lock has many uses:</p>
     73 + <ul>
     74 + <li><a target="_blank" href="https://jstrieb.github.io/link-lock/#eyJ2IjoiMC4wLjEiLCJlIjoiU1ZBemc0NUVoeXJMR1hXYmRUMXpLSFFIa0hiR2F3SzlMaWZzWW5SL0ZiaGp1cnZqMGg5VTE0bG9kVGs3S3B0TjdhcjZ2T3FvRjJLNkxMcDByL05PZE5nUTJ3UlhVOWM2RmFJdXNGajdrNkFkTC82OVJ6dmlFV2R0dWVacFM1dS9SN2w4L3Mzc1pMTVJNeHdhTVhVenYxTjZUVkdWTGloaXc3ZXlGY093Nkp2ZVN3aGl0OW9XWW84Yk9CMkpkTTF4ZnFRSGExbEoiLCJoIjoi8J+lkSIsImkiOiI5L3pmdHFmeHdoWFh4bDc4In0=">Store private bookmarks on a shared computer</a> - Password: avocado</li>
     75 + <li>Add a password to shared Dropbox or Google Drive links</li>
     76 + <li><a target="_blank" href="https://jstrieb.github.io/link-lock/#eyJ2IjoiMC4wLjEiLCJlIjoiZEx3Yi9CNitlK0ZjM1B3ZURrbUY2NjdQWFlIV1dsS3dpclhvZmkvRXBFTXU0ZERlVkJuSmUrN1loS2JxQ3RrPSIsImgiOiIxICsgMSA9ID8iLCJpIjoiRDJYd1MyK1EzaHpuUDV1NyJ9">Implement simple CAPTCHAs</a></li>
     77 + <li><a target="_blank" href="https://jstrieb.github.io/link-lock/#eyJ2IjoiMC4wLjEiLCJlIjoiWWhjbG0xeE9uZTJWU2tvc3N1WERwKytyN1lscW1nMVNNemRoSUVER2xVZVBTUFZ3MFA3WTVwQXdnVFVKZkt4WHJ4Nlg1KytCU09RNlVTTlI3M244VEdTeWJGMmJFTG5wc0x6WVRtZnQ3aDFZSzJ5VW16TEpBTk5VOThqZFMvTVFNUG93cWdoRjVUVnYyRWF1VkVHVVlJeE5iT3BtaldCNWJyMWpXemMyakJTNUxZVGVSajNTbVI5UWNwWlRWWmVrbit4Rzd3VzNIcEttRTdVRWNtbkhZS2dydGVmaHp5eTJGNVd6N1NKSm55OTJPWnJUOEFHUE9XY3JUbmxYV0NsTDB5QjVsQmZnUTJkcHk4Y3RmMHNvdVlvb1l2LzQ1U3krZUNtdHl2WkVDd25IeUhwUForamxsaDhuNUV5U2N1ZVRWTmRtRmlmOFBhM0FtdUpQOTdTYWZXbzNwbUo4cU40UFYvMllQbHlwSGFtTmI1dnBBQkc2cU1yUWlLMVp3WHBUSnF4OG9NNFdVVGh3L3B5S0QzOWRNNml2RlNzQzVRUWpaVHl0ODlSNDNVOVdkRDVMWHprdlZ1bVpNSmM2WDExTkI4V0ZSKzdyOGVvVU8wR21rRkxTU0JlaDJickt3bzkwWjRlZkJHTkZiYWE2dU9SWnQzSm1YU0NSSGZyclVRQ053cU96R2pCKzBYZHJFeC9NbHd3QkFKNTIvY0EraW9IUDk5RkszUDN1MlN6Sk1uQzVVSFg1NGNDd1Z2dWdiMzAvUmNsMjZvZzFxUDU0NWJlMGFiak9wYnZ5aFp6RjhkdDNUUjJFLzBMY2dUQUg4dE5wSVAyYzJoM2d4NlJEQUNTZ25LRzlteW4xdFU4Y0IwbWMrd1NPdkxIRlVXVXhIYnpGSkR0aS9MSDg1RDFvdVRNWTFjM3BsSSsxRFFROG5lbjVrR2hmRUhELzdsSFhIY1ZWTHNCbi9HOTFJZU02T2pTeS9aZFcySGZ4d050VzR2WEE3em1FdjhYRDNHL3M2ZTVqdVdQWjV3ck5JWFdzcDVROHdUSlI3U2JQUi94VDNwUUZncW9LaDF2OXVEWGZBaE5xYStXaElzNTlaR1UzdFlkRVFOZEVLdGpIcnF1bzJkcVpuNnB4eTU1ZDJiOVBrcFRLNGh5TEtDOEc1TmN3TEE3dUIzYTNlNlZ2NjVVVHcrdS9oWTBoMy9Nb3ZJaERmT3k2aGZiN2FQaEIyMStxSGZSeWt2VlFPUFZrbE41ak5EK1hKZURialgvd0NUWXJJVm0yOFZkTHppZURob2ZpRGpJRjdyakFQNlF6dWJjaGJYRGFtbFZQWUhOaGVNMWdTeGROSGw5a1lRVE5kbjA1WlcvbVhXNkQwbHk0VkwrOHRwZzdxQjU2YTRyL3lIWHA0Q0tSUkdIaEVWQUptbmh2ZnBaWE11QWdneGVoSkRibVdVKy9VMUgwM2JicUZub2h5R0VGRUxQV2JjZ05kdDJwWU1Cdy81TVNqSkdWWWRPQk5nTUsxbHA2ZVRxRGhwTVdJT2E4a1dSYWx3RzV1bDhuQjhnUVBkcXBCYVdxc3I3V242SVZoZHdLc0FvTGtsdTlnL0JoelNlZEQxRjcyblprN2tSS2l3a3BJbVhOeW9TQk1SSFJSMURjSm9qdU1ZVWlrZ2JxM0dpR2ZqNmMwTTBlU2lyMlhJRnRCTzd2VkJyRmpZL1pvVnJBQ1kwTzJ2UVlGcHovaEprNElKN0daOUpmc3U4ajl5Umc5S3IrNFU3MFhoZHRLY1VYeEtrbCt1VDBtN1owb2puR0xWOGRtampzTVdna3ZhV0FYNkJpK3cycVJKYnVYRW5yUEN5dUZGODhiZ2k3UDNYUVhOMHZTY3h2Uk4wVktKQ1MvR2RVWTJsZ0lDSXVBWFlUVE9KTGNsRkJPQWxialRmZThoTG5saTkzQm4xcnZOamhnM0Y2UkJ2N3NQOTlzODlGT3pwcEZHeHVKS1RhNEg4Y2NSRmxMWDBWbE9kR0RhNWM0NGVTdzh5dCsxWWJndDlvMlExcWNSYVZsaVdadSs5VjdxM1pqcWIxcDdKb2FUN0pDQ1U2ZXR6b0dJWjBQT1JqL3pVNUlVQkRjYXdHZWszZ0djSDBLdDcxa1NSN0F2TWRYeTR3WVI4ZmdTTlpoR3gwSTZYczZ5Vy9oWFB1WERPRjNHTVBTRFFmNGNhUjBuc3pmYTl3MXdGMzVSYktodEVkZnIwU0NLQzhIRXFzNWdsQ0M4RmIxN04wbGtBVlFwSWFRRGJrN254TjVINEFhQ3RKbU5JNHFYUDhocUV6aVhySGhhZWNzNkVBUDBvdjg2cWp4dz09IiwiaCI6InVybHBhZ2U1IiwiaSI6InJNZ2xiSEpzK3pSL2dteFAifQ==">Encrypt entire pages</a> (via <a target="_blank" href="https://github.com/jstrieb/urlpages">URL Pages</a>) - Password: urlpage5</li>
     78 + <li>Post private links on public websites</li>
     79 + </ul>
    74 80   </div>
    75 81   
    76 82   <!-- Main form -->
    skipped 55 lines
Please wait...
Page is in error, reload to recover