PageSourceSearch

https://encrypt-qr-codes.netlify.app/

html encrypt-qr-codes.netlify.app collected 2026-10-03 10:42:00 UTC 81,898 bytes, 10 lines download raw bytes

1<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/>
2<!-- This site is hosted on Netlify. Anyone can build and deploy a site
3     like this one for free: https://netlify.new/?utm_campaign=loops&utm_source=ai-legible&utm_medium=owned&utm_content=comment&utm_id=719381dc-2ffe-449a-8f11-90be417facb9
4     Netlify hosting facts for this site: static/SSR served via Netlify Edge. --><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/488dc5e4d81c8b87.css" crossorigin="" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-02c2044083adcafe.js" crossorigin=""/>
4<script src="/_next/static/chunks/fd9d1056-274b2ab111c395c5.js" async="" crossorigin=""></script>
4<script src="/_next/static/chunks/938-23b1dda4d5f3ee2f.js" async="" crossorigin=""></script>
4<script src="/_next/static/chunks/main-app-99645ed85d33f049.js" async="" crossorigin=""></script>
4<script src="/_next/static/chunks/250-008d0470a59c611f.js" async=""></script>
4<script src="/_next/static/chunks/749-ddc5288e54df8968.js" async=""></script>
4<script src="/_next/static/chunks/app/page-4b17837dd87472aa.js" async=""></script>
4<title>Encrypt QR Codes</title><meta name="description" content="Securely encrypt and decrypt QR codes used for two-factor authentication. Safely store encrypted QR codes in your photo gallery or print them out."/><link rel="canonical" href="https://encrypt-qr-codes.netlify.app/"/><link rel="alternate" hrefLang="en-US" href="https://encrypt-qr-codes.netlify.app/en-US"/><link rel="alternate" hrefLang="de-DE" href="https://encrypt-qr-codes.netlify.app/de-DE"/><meta property="og:title" content="Encrypt QR Codes"/><meta property="og:description" content="Securely encrypt and decrypt QR codes used for two-factor authentication. Safely store encrypted QR codes in your photo gallery or print them out."/><meta property="og:image:type" content="image/png"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:image" content="https://encrypt-qr-codes.netlify.app/opengraph-image.png?856f7a7127d81ade"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Encrypt QR Codes"/><meta name="twitter:description" content="Securely encrypt and decrypt QR codes used for two-factor authentication. Safely store encrypted QR codes in your photo gallery or print them out."/><meta name="twitter:image:type" content="image/png"/><meta name="twitter:image:width" content="1200"/><meta name="twitter:image:height" content="630"/><meta name="twitter:image" content="https://encrypt-qr-codes.netlify.app/opengraph-image.png?856f7a7127d81ade"/><link rel="icon" href="/icon.svg?e44b09a5254a3dad" type="image/svg+xml" sizes="any"/>
4<script src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js" crossorigin="" noModule=""></script>
4</head><body class="bg-gray-100 !font-mono"><main class="relative min-h-screen w-full overflow-hidden border-y-4 border-indigo-500 bg-gray-50 px-5 pb-32 pt-12 sm:pt-16"><section class="absolute left-1/2 top-0 hidden w-full max-w-screen-2xl -translate-x-1/2 opacity-80 md:block"><div class="absolute top-0 flex -translate-x-1/2 flex-col items-center text-indigo-500" style="left:10%"><svg viewBox="0 0 10 150" height="150"><g stroke="currentColor" stroke-linecap="round" stroke-width="6"><line x1="5" y1="5" x2="5" y2="10" opacity="0.8768772334567403"></line><line x1="5" y1="20" x2="5" y2="35" opacity="0.5802299120099546"></line><line x1="5" y1="45" x2="5" y2="55" opacity="0.30323941368067536"></line><line x1="5" y1="65" x2="5" y2="70" opacity="0.2811130524806904"></line><line x1="5" y1="80" x2="5" y2="95" opacity="0.5566043793066711"></line><line x1="5" y1="105" x2="5" y2="115" opacity="0.935296556852022"></line><line x1="5" y1="125" x2="5" y2="140" opacity="0.9393085480688246"></line></g></svg><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true" class="h-20 w-20 rotate-6 scale-90 rounded-lg bg-red-200 p-2 text-red-800"><path stroke-linecap="round" stroke-linejoin="round" d="M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M16 20h4M4 12h4m12 0h.01M5 8h2a1 1 0 001-1V5a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1zm12 0h2a1 1 0 001-1V5a1 1 0 00-1-1h-2a1 1 0 00-1 1v2a1 1 0 001 1zM5 20h2a1 1 0 001-1v-2a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1z"></path></svg></div><div class="absolute top-0 flex -translate-x-1/2 flex-col items-center text-indigo-500" style="left:25%"><svg viewBox="0 0 10 75" height="75"><g stroke="currentColor" stroke-linecap="round" stroke-width="6"><line x1="5" y1="5" x2="5" y2="20" opacity="0.8565888542324245"></line><line x1="5" y1="30" x2="5" y2="35" opacity="0.9995947019871205"></line><line x1="5" y1="45" x2="5" y2="65" opacity="0.32218003067377055"></line></g></svg><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true" class="h-20 w-20 -rotate-2 rounded-lg bg-blue-200 p-2 text-blue-800"><path stroke-linecap="round" stroke-linejoin="round" d="M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M16 20h4M4 12h4m12 0h.01M5 8h2a1 1 0 001-1V5a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1zm12 0h2a1 1 0 001-1V5a1 1 0 00-1-1h-2a1 1 0 00-1 1v2a1 1 0 001 1zM5 20h2a1 1 0 001-1v-2a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1z"></path></svg></div><div class="absolute top-0 flex -translate-x-1/2 flex-col items-center text-indigo-500" style="left:75%"><svg viewBox="0 0 10 105" height="105"><g stroke="currentColor" stroke-linecap="round" stroke-width="6"><line x1="5" y1="5" x2="5" y2="30" opacity="0.8351107083162705"></line><line x1="5" y1="40" x2="5" y2="45" opacity="0.5714728714396757"></line><line x1="5" y1="55" x2="5" y2="70" opacity="0.8704794049004032"></line><line x1="5" y1="80" x2="5" y2="95" opacity="0.5566043793066711"></line></g></svg><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true" class="h-20 w-20 rotate-3 scale-100 rounded-lg bg-orange-200 p-2 text-orange-800"><path stroke-linecap="round" stroke-linejoin="round" d="M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M16 20h4M4 12h4m12 0h.01M5 8h2a1 1 0 001-1V5a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1zm12 0h2a1 1 0 001-1V5a1 1 0 00-1-1h-2a1 1 0 00-1 1v2a1 1 0 001 1zM5 20h2a1 1 0 001-1v-2a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1z"></path></svg></div><div class="absolute top-0 flex -translate-x-1/2 flex-col items-center text-indigo-500" style="left:90%"><svg viewBox="0 0 10 170" height="170"><g stroke="currentColor" stroke-linecap="round" stroke-width="6"><line x1="5" y1="5" x2="5" y2="10" opacity="0.8768772334567403"></line><line x1="5" y1="20" x2="5" y2="25" opacity="0.6074644841453587"></line><line x1="5" y1="35" x2="5" y2="50" opacity="0.31436873435944873"></line><line x1="5" y1="60" x2="5" y2="70" opacity="0.564032362128853"></line><line x1="5" y1="80" x2="5" y2="95" opacity="0.5566043793066711"></line>
4<line x1="5" y1="105" x2="5" y2="125" opacity="0.9196750530186872"></line><line x1="5" y1="135" x2="5" y2="140" opacity="0.7788749029133999"></line><line x1="5" y1="150" x2="5" y2="160" opacity="0.22122975207014306"></line></g></svg><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true" class="h-20 w-20 -rotate-3 scale-95 rounded-lg bg-pink-200 p-2 text-pink-800"><path stroke-linecap="round" stroke-linejoin="round" d="M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M16 20h4M4 12h4m12 0h.01M5 8h2a1 1 0 001-1V5a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1zm12 0h2a1 1 0 001-1V5a1 1 0 00-1-1h-2a1 1 0 00-1 1v2a1 1 0 001 1zM5 20h2a1 1 0 001-1v-2a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1z"></path></svg></div></section><section class="relative flex flex-col items-center text-center"><div class="relative z-10 flex flex-col items-center text-center"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true" class="mb-4 h-20 w-20 text-indigo-500"><path stroke-linecap="round" stroke-linejoin="round" d="M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M16 20h4M4 12h4m12 0h.01M5 8h2a1 1 0 001-1V5a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1zm12 0h2a1 1 0 001-1V5a1 1 0 00-1-1h-2a1 1 0 00-1 1v2a1 1 0 001 1zM5 20h2a1 1 0 001-1v-2a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1z"></path></svg><h1 class="text-3xl font-bold leading-loose tracking-tight text-gray-900 sm:text-4xl">Encrypt QR codes<br/>for private 2FA backups</h1><p class="mt-6 max-w-xl text-lg text-gray-600">Securely encrypt and decrypt QR codes used for two-factor authentication. Safely store encrypted QR codes as photos or print them out.</p><div class="mt-10 flex items-center justify-center gap-x-6"><a class="flex items-center rounded-md bg-indigo-600 px-3.5 py-2.5 text-lg font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600" href="/encrypt"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="-ml-1 mr-2 h-6 w-6"><path fill-rule="evenodd" d="M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z" clip-rule="evenodd"></path></svg><span>Encrypt</span></a><a class="flex items-center rounded-md bg-indigo-600 px-3.5 py-2.5 text-lg font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600" href="/decrypt"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="-ml-1 mr-2 h-6 w-6"><path d="M10 2a5 5 0 00-5 5v2a2 2 0 00-2 2v5a2 2 0 002 2h10a2 2 0 002-2v-5a2 2 0 00-2-2H7V7a3 3 0 015.905-.75 1 1 0 001.937-.5A5.002 5.002 0 0010 2z"></path></svg><span>Decrypt</span></a></div><a class="mx-auto mt-5 flex items-center rounded-md px-3 py-2 font-medium text-black hover:bg-gray-200 hover:bg-opacity-75" href="https://github.com/kangabru/encrypt-qr-codes"><svg viewBox="0 0 98 96" class="-ml-1 -mt-0.5 mr-2 h-5 w-5" aria-hidden="true"><path fill="currentColor" fill-rule="evenodd" clip-rule="evenodd" d="M48.854 0C21.839 0 0 22 0 49.217c0 21.756 13.993 40.172 33.405 46.69 2.427.49 3.316-1.059 3.316-2.3
462 0-1.141-.08-5.052-.08-9.127-13.59 2.934-16.42-5.867-16.42-5.867-2.184-5.704-5.42-7.17-5.42-7.17-4.448-3.015.324-3.015.324-3.015 4.934.326 7.523 5.052 7.523 5.052 4.367 7.496 11.404 5.378 14.235 4.074.404-3.178 1.699-5.378 3.074-6.6-10.839-1.141-22.243-5.378-22.243-24.283 0-5.378 1.94-9.778 5.014-13.2-.485-1.222-2.184-6.275.486-13.038 0 0 4.125-1.304 13.426 5.052a46.97 46.97 0 0 1 12.214-1.63c4.125 0 8.33.571 12.213 1.63 9.302-6.356 13.427-5.052 13.427-5.052 2.67 6.763.97 11.816.485 13.038 3.155 3.422 5.015 7.822 5.015 13.2 0 18.905-11.404 23.06-22.324 24.283 1.78 1.548 3.316 4.481 3.316 9.126 0 6.6-.08 11.897-.08 13.526 0 1.304.89 2.853 3.316 2.364 19.412-6.52 33.405-24.935 33.405-46.691C97.707 22 75.788 0 48.854 0z"></path></svg><span>Star on GitHub</span></a></div></section><img alt="Encrypt UI" loading="lazy" width="1542" height="1018" decoding="async" data-nimg="1" class="mx-auto mt-5 w-full max-w-3xl rounded-2xl shadow" style="color:transparent;background-size:cover;background-position:50% 50%;background-repeat:no-repeat;background-image:url(&quot;data:image/svg+xml;charset=utf-8,%3Csvg xmlns=&#x27;http://www.w3.org/2000/svg&#x27; viewBox=&#x27;0 0 1542 1018&#x27;%3E%3Cfilter id=&#x27;b&#x27; color-interpolation-filters=&#x27;sRGB&#x27;%3E%3CfeGaussianBlur stdDeviation=&#x27;20&#x27;/%3E%3CfeColorMatrix values=&#x27;1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100 -1&#x27; result=&#x27;s&#x27;/%3E%3CfeFlood x=&#x27;0&#x27; y=&#x27;0&#x27; width=&#x27;100%25&#x27; height=&#x27;100%25&#x27;/%3E%3CfeComposite operator=&#x27;out&#x27; in=&#x27;s&#x27;/%3E%3CfeComposite in2=&#x27;SourceGraphic&#x27;/%3E%3CfeGaussianBlur stdDeviation=&#x27;20&#x27;/%3E%3C/filter%3E%3Cimage width=&#x27;100%25&#x27; height=&#x27;100%25&#x27; x=&#x27;0&#x27; y=&#x27;0&#x27; preserveAspectRatio=&#x27;none&#x27; style=&#x27;filter: url(%23b);&#x27; href=&#x27;data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wEEEAAjACMAIwAjACUAIwAnACsAKwAnADYAOwA0ADsANgBQAEoAQwBDAEoAUAB6AFcAXQBXAF0AVwB6ALgAcwCHAHMAcwCHAHMAuACjAMUAoQCWAKEAxQCjASUA5gDMAMwA5gElAVMBHAENARwBUwGaAW8BbwGaAgQB6gIEAqMCowOLEQAjACMAIwAjACUAIwAnACsAKwAnADYAOwA0ADsANgBQAEoAQwBDAEoAUAB6AFcAXQBXAF0AVwB6ALgAcwCHAHMAcwCHAHMAuACjAMUAoQCWAKEAxQCjASUA5gDMAMwA5gElAVMBHAENARwBUwGaAW8BbwGaAgQB6gIEAqMCowOL/8IAEQgATwB4AwEiAAIRAQMRAf/EAC8AAAIDAQAAAAAAAAAAAAAAAAAEAQIDBQEBAQEBAQAAAAAAAAAAAAAAAAECAwT/2gAMAwEAAhADEAAAAGWBnqWGjJUakUX6auoFMs1gWubGAVNz0zRmJ8lwVaSi/Q53SBZmKTy1wiCly0EjIwdZM1nlaZ7yLsAETAlnqsBa5WusD4ARYCYCSAmAFMOlIjD4IU6QVJDFZzLpMNLmmdNwwew3wUNDTO83MS4XJOd//8QAMRAAAQMCAwcCBQQDAAAAAAAAAQACEQMhBBIUEzFBUVKSoRBhICIjY5EyNFNyRIGD/9oACAEBAAE/AMLhaNWiHvmZK0OH5O7locPyd3LQ4fk7uWhw/J3ctDh+Tu5aHD8ndy0tLVbK+XZytDheT+5aHDcn9y0OG5P7locNyf3LQ4bk/uWhw3J/csVhaNKiXsmZCwP7Zv8AZyDANzVFoyoCNwWRmYugyQAsreRQAG5f5/8AwVaNq6+4XCZDbmA0kATuU/VLS83vvXzva68CyBe2LAHdEp0ZTDpjksZ+07FhGPZQa1wgy70xE5LGDKfULQ0Z8t090PDDVGYyYlDcPTI7WZ4+XZRKrnI8mE2xJZ8wKpvLWuB32OZPNVpNiTFkBMZTaIlEgENZIvaBZYpj34bK0SZYh6YgSwCBvRLgKhcW2go1YDQ7NDTE7/Xiq2XO64kZZTAJaXfqg3BML6QBp52kACZv+ZTmENc4kC0crTaE6QzqFtyDAYJLpELgEPSrT2jYmFpxxdM7xCOHbLTNwZJj14rEZszgCbhCXggmLAray4ONxxiwQyCnLmOF7OIQkNAeIn3hPnODAOUcRNiuAXDfCB95UjmPh4quYcbyTuaiDDYEuNwJhRDrU3ZzciYUZxOch0QHLcRJmQfBV2gfN/bdIXAKQBdSz2/Cgch8PFVg41ItEcU1jz+r2/2m0KlnXJ32tJWwq/Kcj8wPVZClVY0ZkabyC4wTC4BDcr+yv7fDx+MqtV2LA7LN4Wv+0td9pHFVBY0PKOMcBJo+Vr/tLX/aU8fZDGOcJFHytW/+HyjjHNEml5VXEFjwwMm0rVP/AIPK1TzP0fKo1tswuyxdPYx7cr2zdabD9Hlaah0eVpqHQfytNQ6D+VpsP0eVpsP0efTTYfo8rTUOjytNQ6PKfRpVDLmXhabD9HlabD9HlMYxjYYIEr//xAAhEQACAgICAQUAAAAAAAAAAAABAgARA1ITIjEQEiBAQf/aAAgBAgEBPwB3cO3Y+ZyPsZyPsYrv27HxOR9jOR9jOR9jMJJSyf2E2SfUGr+CZWQUAPoqcddlNy8Opl4dTHKGvaCJeLUy8VjqZeLWGrNeJ//EABcRAQEBAQAAAAAAAAAAAAAAACEAEFD/2gAIAQMBAT8A4DM4zOf/2Q==&#x27;/%3E%3C/svg%3E&quot;)" srcSet="/_next/image?url=%2Fimages%2Fui-encrypt.png&amp;w=1920&amp;q=75 1x, /_next/image?url=%2Fimages%2Fui-encrypt.png&amp;w=3840&amp;q=75 2x" src="/_next/image?url=%2Fimages%2Fui-encrypt.png&amp;w=3840&amp;q=75"/><section class="mx-auto mt-16 max-w-2xl sm:mt-20 lg:mt-24 lg:max-w-4xl"><dl class="grid max-w-xl grid-cols-1 gap-x-8 gap-y-10 lg:max-w-none lg:grid-cols-2 lg:gap-y-16"><div class="relative pl-16"><dt class="text-base font-semibold leading-7 text-gray-900"><div class="absolute left-0 top-0 flex h-10 w-10 items-center justify-center rounded-lg bg-indigo-600"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="h-6 w-6 text-white"><path fill-rule="evenodd" d="M4 3a2 2 0 00-2 2v10a2 2 0 002 2h12a2 2 0 002-2V5a2 2 0 00-2-2H4zm12 12H4l4-8 3 6 2-4 3 6z" clip-rule="evenodd"></path></svg></div>Secure Backups</dt><dd class="mt-2 text-base leading-7 text-gray-600">Encrypted QR code images can be saved or printed for account recovery if your 2FA device is lost.</dd></div><div class="relative pl-16"><dt class="text-base font-semibold leading-7 text-gray-900"><div class="absolute left-0 top-0 flex h-10 w-10 items-center justify-center rounded-lg bg-indigo-600"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="h-6 w-6 text-white"><path fill-rule="evenodd" d="M3.707 2.293a1 1 0 00-1.414 1.414l14 14a1 1 0 001.414-1.414l-1.473-1.473A10.014 10.014 0 0019.542 10C18.268 5.943 14.478 3 10 3a9.958 9.958 0 00-4.512 1.074l-1.78-1.781zm4.261 4.26l1.514 1.515a2.003 2.003 0 012.45 2.45l1.514 1.514a4 4 0 00-5.478-5.478z" clip-rule="evenodd"></path><path d="M12.454 16.697L9.75 13.992a4 4 0 01-3.742-3.741L2.335 6.578A9.98 9.98 0 00.458 10c1.274 4.057 5.065 7 9.542 7 .847 0 1.669-.105 2.454-.303z"></path></svg></div>Privacy Focused</dt><dd class="mt-2 text-base leading-7 text-gray-600">No data is collected about you and all QR code scanning, encryption, and decryption is done on your device.</dd></div><div class="relative pl-16"><dt class="text-base font-semibold leading-7 text-gray-900"><div class="absolute left-0 top-0 flex h-10 w-10 items-center justify-center rounded-lg bg-indigo-600"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="h-6 w-6 text-white"><path fill-rule="evenodd" d="M12.316 3.051a1 1 0 01.633 1.265l-4 12a1 1 0 11-1.898-.632l4-12a1 1 0 011.265-.633zM5.707 6.293a1 1 0 010 1.414L3.414 10l2.293 2.293a1 1 0 11-1.414 1.414l-3-3a1 1 0 010-1.414l3-3a1 1 0 011.414 0zm8.586 0a1 1 0 011.414 0l3 3a1 1 0 010 1.414l-3 3a1 1 0 11-1.414-1.414L16.586 10l-2.293-2.293a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></div>MIT Open Source</dt><dd class="mt-2 text-base leading-7 text-gray-600"><a class="text-indigo-900 underline" href="https://github.com/kangabru/encrypt-qr-codes">Review the code</a> and reuse it however you like. <a class="text-indigo-900 underline" href="https://github.com/kangabru/encrypt-qr-codes#deploy">Self-host</a> or run the<!-- --> <a class="text-indigo-900 underline" href="https://github.com/kangabru/encrypt-qr-codes#develop">site locally</a> for fully offline encryption.<!-- --> </dd></div><div class="relative pl-16"><dt class="text-base font-semibold leading-7 text-gray-900"><div class="absolute left-0 top-0 flex h-10 w-10 items-center justify-center rounded-lg bg-indigo-600"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="h-6 w-6 text-white"><path fill-rule="evenodd" d="M6.625 2.655A9 9 0 0119 11a1 1 0 11-2 0 7 7 0 00-9.625-6.492 1 1 0 11-.75-1.853zM4.662 4.959A1 1 0 014.75 6.37 6.97 6.97 0 003 11a1 1 0 11-2 0 8.97 8.97 0 012.25-5.953 1 1 0 011.412-.088z" clip-rule="evenodd"></path><path fill-rule="evenodd" d="M5 11a5 5 0 1110 0 1 1 0 11-2 0 3 3 0 10-6 0c0 1.677-.345 3.276-.968 4.729a1 1 0 11-1.838-.789A9.964 9.964 0 005 11zm8.921 2.012a1 1 0 01.831 1.145 19.86 19.86 0 01-.545 2.436 1 1 0 11-1.92-.558c.207-.713.371-1.445.49-2.192a1 1 0 011.144-.83z" clip-rule="evenodd"></path><path fill-rule="evenodd" d="M10 10a1 1 0 011 1c0 2.236-.46 4.368-1.29 6.304a1 1 0 01-1.838-.789A13.952 13.952 0 009 11a1 1 0 011-1z" clip-rule="evenodd"></path></svg></div>Advanced Security</dt><dd class="mt-2 text-base leading-7 text-gray-600">Encryption uses <a class="text-indigo-900 underline" href="https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/encrypt#supported_algorithms">AES-GCM and PBKDF2</a> <!-- -->
4with a salted 256-bit key. View the process in<!-- --> <a class="text-indigo-900 underline" href="https://github.com/kangabru/encrypt-qr-codes/blob/master/src/common/crypto.ts">Typescript</a> or<!-- --> <a class="text-indigo-900 underline" href="https://github.com/kangabru/encrypt-qr-codes/blob/master/python/decrypt.py">Python</a>.</dd></div></dl></section><section class="relative mx-auto mt-20 max-w-screen-2xl"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true" class="absolute left-10 top-1/4 h-48 w-48 rotate-6 text-indigo-500 opacity-5"><path stroke-linecap="round" stroke-linejoin="round" d="M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M16 20h4M4 12h4m12 0h.01M5 8h2a1 1 0 001-1V5a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1zm12 0h2a1 1 0 001-1V5a1 1 0 00-1-1h-2a1 1 0 00-1 1v2a1 1 0 001 1zM5 20h2a1 1 0 001-1v-2a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true" class="absolute -right-5 top-1/2 h-64 w-64 -rotate-3 text-indigo-500 opacity-5"><path stroke-linecap="round" stroke-linejoin="round" d="M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M16 20h4M4 12h4m12 0h.01M5 8h2a1 1 0 001-1V5a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1zm12 0h2a1 1 0 001-1V5a1 1 0 00-1-1h-2a1 1 0 00-1 1v2a1 1 0 001 1zM5 20h2a1 1 0 001-1v-2a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true" class="absolute -left-5 top-[80%] h-52 w-52 rotate-3 text-indigo-500 opacity-5"><path stroke-linecap="round" stroke-linejoin="round" d="M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M16 20h4M4 12h4m12 0h.01M5 8h2a1 1 0 001-1V5a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1zm12 0h2a1 1 0 001-1V5a1 1 0 00-1-1h-2a1 1 0 00-1 1v2a1 1 0 001 1zM5 20h2a1 1 0 001-1v-2a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1z"></path></svg><div class="mx-auto max-w-2xl"><h2 class="text-xl font-bold leading-10 tracking-tight text-gray-900">Frequently Asked Questions</h2><dl><div><dt class="font-semibold text-slate-900"><div class="my-10 h-px bg-gradient-to-r from-slate-200/0 via-slate-200 to-slate-200/0"></div>Who is this for?</dt><dd class="mt-4 space-y-8 leading-8">Security concious people who want to backup their 2FA codes. You might already use a service like Authy but want extra redundancy and flexibility. The encrypted QR codes are just images that you can safely save in Whatsapp, a photo gallery, and even print them out.</dd></div><div><dt class="font-semibold text-slate-900"><div class="my-10 h-px bg-gradient-to-r from-slate-200/0 via-slate-200 to-slate-200/0"></div>What is a QR code?</dt><dd class="mt-4 space-y-8 leading-8"><p class="flex"><span>A QR (quick-response) code is a barcode that&#x27;s easy to scan and contains useful data. They are blocky, black/white, square images which you usually scan when adding two-factor auth to an account.</span><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true" class="ml-2 h-28 w-28 flex-shrink-0 text-gray-700"><path stroke-linecap="round" stroke-linejoin="round" d="M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M16 20h4M4 12h4m12 0h.01M5 8h2a1 1 0 001-1V5a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1zm12 0h2a1 1 0 001-1V5a1 1 0 00-1-1h-2a1 1 0 00-1 1v2a1 1 0 001 1zM5 20h2a1 1 0 001-1v-2a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1z"></path></svg></p></dd></div><div><dt class="font-semibold text-slate-900"><div class="my-10 h-px bg-gradient-to-r from-slate-200/0 via-slate-200 to-slate-200/0"></div>What is two-factor auth (2FA)?</dt><dd class="mt-4 space-y-8 leading-8"><ul class="list-disc pl-4"><li>Two-factor authentication (2FA) helps protect your online accounts from being accessed by someone who has access to your password.</li><li>You usually set up 2FA by scanning a QR code to link the service with an authenticator app on your phone. The app generates a random co
4de every few seconds which you fill into the website when asked.</li><li>By knowing your password and filling in the 2FA code, you verify two factors: something you know and something you have. This makes it much harder to hack an account even if someone knows your password.</li></ul></dd></div><div><dt class="font-semibold text-slate-900"><div class="my-10 h-px bg-gradient-to-r from-slate-200/0 via-slate-200 to-slate-200/0"></div>Why should I backup 2FA codes?</dt><dd class="mt-4 space-y-8 leading-8">If you lose or break your 2FA device you could lose access to some accounts forever - even if you have the password. We often set up 2FA with our most important accounts so losing access could be a huge loss of data e.g. photos, emails, and documents. You should absolutely backup 2FA codes and in multiple places.</dd></div><div><dt class="font-semibold text-slate-900"><div class="my-10 h-px bg-gradient-to-r from-slate-200/0 via-slate-200 to-slate-200/0"></div>What&#x27;s wrong with Authy?</dt><dd class="mt-4 space-y-8 leading-8"><ul class="list-disc pl-4"><li><a class="text-indigo-900 underline" href="https://authy.com/">Authy</a> is a great authenticator app that can double as a backup by saving your 2FA codes for you. However, this is opt-in and you must now rely on a private service. If you lose access to Authy, you lose all of your 2FA codes.</li><li>One problem is that Authy is linked to your mobile phone number and<!-- --> <a class="text-indigo-900 underline" href="https://authy.com/blog/how-the-authy-two-factor-backups-work/">you must receive an sms</a> to gain access to your account. If you lose your phone &amp; SIM then it&#x27;s up to your phone provider to give you that number again, and that could take weeks.</li><li>So definitely use a service like Authy, but it&#x27;s a good idea to have extra backups. Encrypted QR codes are just images that you can safely save in Whatsapp, a photo gallery, and even print them out.</li></ul></dd></div><div><dt class="font-semibold text-slate-900"><div class="my-10 h-px bg-gradient-to-r from-slate-200/0 via-slate-200 to-slate-200/0"></div>What&#x27;s wrong with 1Password?</dt><dd class="mt-4 space-y-8 leading-8"><ul class="list-disc pl-4"><li>1Password is a great password manager that can double as a backup by saving your 2FA codes for you. This is convenient but in the (unlikely) event that your vault is compromised then your 2FA codes won&#x27;t protect those accounts.</li><li><a class="text-indigo-900 underline" href="https://1password.com/features/two-factor-authentication/">They claim</a> that most hacks made are not by compromising your vault, but by guessing your password or finding it in a data breach. This is true but a vault is a high value target and even a breach on LastPass was<!-- --> <a class="text-indigo-900 underline" href="https://en.wikipedia.org/wiki/LastPass#Security_incidents">made</a> by<!-- --> <a class="text-indigo-900 underline" href="https://blog.lastpass.com/2023/03/security-incident-update-recommended-actions/">hacking</a> the<!-- --> <a class="text-indigo-900 underline" href="https://support.lastpass.com/s/document-item?language=en_US&amp;bundleId=lastpass&amp;topicId=LastPass/incident-2-details.html&amp;_LANG=enus">corporate vault</a>.</li><li>So if you want to separate your 2FA codes from your password manager then encrypting and backing up your 2FA codes is a good solution.</li></ul></dd></div><div><dt class="font-semibold text-slate-900"><div class="my-10 h-px bg-gradient-to-r from-slate-200/0 via-slate-200 to-slate-200/0"></div>Can I rely on this website?</dt><dd class="mt-4 space-y-8 leading-8">Yes but the great thing is, you don&#x27;t have to! This website is fully open source so you can control how you use it.<!-- --> <a class="text-indigo-900 underline" href="https://github.com/kangabru/encrypt-qr-codes">Fork the code</a> and reuse it however you like, <a class="text-indigo-900 underline" href="https://github.com/kangabru/encrypt-qr-codes#deploy">self-host</a> it, or run the<!-- --> <a class="text-indigo-900 underline" href="https://github.com/kangabru/encrypt-qr-codes#develop">site locally</a> for fully offline use.<!-- --> <!-- -->
4Decryption is language agnostic so you can always recover an encrypted QR code in future. Here are examples in both<!-- --> <a class="text-indigo-900 underline" href="https://github.com/kangabru/encrypt-qr-codes/blob/master/src/common/crypto.ts">Typescript</a> and<!-- --> <a class="text-indigo-900 underline" href="https://github.com/kangabru/encrypt-qr-codes/blob/master/python/decrypt.py">Python</a>.</dd></div><div><dt class="font-semibold text-slate-900"><div class="my-10 h-px bg-gradient-to-r from-slate-200/0 via-slate-200 to-slate-200/0"></div><span class="flex items-center"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="-mt-0.5 mr-2 h-5 w-5"><path fill-rule="evenodd" d="M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z" clip-rule="evenodd"></path></svg>How are codes encrypted?</span></dt><dd class="mt-4 space-y-8 leading-8"><ul class="list-disc pl-4"><li>Note: Encryption/decryption is done on your device and no data is collected about you.</li><li>A QR Code is scanned to decode its plaintext content.</li><li>The plaintext is encrypted into ciphertext as follows:<ul class="list-disc pl-4 ml-2"><li><a class="text-indigo-900 underline" href="https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/deriveKey#pbkdf2">PBKDF2</a> derives a 256 bit key from the password and random salt.</li><li><a class="text-indigo-900 underline" href="https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/encrypt#supported_algorithms">AES-GCM</a> with random init values (IV) encrypts the data.</li><li>Cryptographically strong random data is provided by<!-- --> <a class="text-indigo-900 underline" href="https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues">Crypto</a>.</li></ul></li><li><div class="sm:flex"><p class="mr-2 flex-1">The ciphertext, salt, and IV are encoded into a text format and saved as a JSON object. The data is encoded into a new encrypted QR code.<!-- --> <a class="text-indigo-900 underline" href="https://github.com/kangabru/encrypt-qr-codes/blob/master/src/common/crypto.ts">View the process here</a>.</p><p class="text-mono whitespace-pre-wrap rounded-md border border-gray-200 bg-white px-3 py-2 text-sm shadow">{
5  &quot;iv&quot;:&quot;5a7e0a...&quot;,
6  &quot;salt&quot;:&quot;74c98...&quot;,
7  &quot;cipherText&quot;:&quot;0e50b...&quot;,
8  &quot;hint&quot;:&quot;Google Account&quot;,
9  &quot;date&quot;:&quot;2024-01-01&quot;
10}</p></div></li></ul></dd></div><div><dt class="font-semibold text-slate-900"><div class="my-10 h-px bg-gradient-to-r from-slate-200/0 via-slate-200 to-slate-200/0"></div><span class="flex items-center"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="-mt-0.5 mr-2 h-5 w-5"><path fill-rule="evenodd" d="M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z" clip-rule="evenodd"></path></svg>How do I encrypt a 2FA code?</span></dt><dd class="mt-4 space-y-8 leading-8"><ul class="list-disc pl-4"><li>Log into an account and follow their instructions to set up 2FA. Stop when they present you with a QR code.</li><li>Before you scan the QR code with your auth app, first encrypt a copy of the QR code with this website.</li><li>Either screenshot, copy/paste, or scan the QR code with a camera and encrypt it. The following Q&amp;A has more details.</li><li>Download the encrypted QR code and save or print the image in multiple places as a backup.</li><li>Continue setting up 2FA with the original QR code as normal with your authenticator app.</li></ul></dd></div><div><dt class="font-semibold text-slate-900"><div class="my-10 h-px bg-gradient-to-r from-slate-200/0 via-slate-200 to-slate-200/0"></div><span class="flex items-center"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="-mt-0.5 mr-2 h-5 w-5"><path fill-rule="evenodd" d="M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z" clip-rule="evenodd"></path></svg>How do I encrypt a QR code?</span></dt><dd class="mt-4 space-y-8 leading-8"><ul class="list-disc pl-4"><li>Scan a QR code by selecting a file, copy &amp; paste, drag &amp; drop, or scanning it via camera. E.g:<ul class="list-disc pl-4 ml-2"><li>Scan a QR code on your phone via your laptop webcam.</li><li>Scan a printed QR code with your mobile camera.</li><li>Screenshot the QR code, save, then select the image file.</li><li>Right click and copy the QR code, then &#x27;Ctrl+V&#x27; to paste here.</li></ul></li><li>Type an unencrypted hint to remember what the QR code is for.</li><li>Type a secure password to encrypt the QR code with. You MUST remember the password to unlock it again - this is unrecoverable if you forget it. Ideally use a unique password for each QR code.</li><li>Download the encrypted QR code and save or print the image in multiple places as a backup.</li></ul></dd></div><div><dt class="font-semibold text-slate-900"><div class="my-10 h-px bg-gradient-to-r from-slate-200/0 via-slate-200 to-slate-200/0"></div><span class="flex items-center"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="-mt-0.5 mr-2 h-5 w-5"><path fill-rule="evenodd" d="M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z" clip-rule="evenodd"></path></svg>How do I choose and store a password?</span></dt><dd class="mt-4 space-y-8 leading-8"><ul class="list-disc pl-4"><li>1Password has good tips <a class="text-indigo-900 underline" href="https://support.1password.com/strong-account-password/">here</a> <!-- -->and <a class="text-indigo-900 underline" href="https://support.1password.com/pbkdf2/">here</a> for choosing a password:<ul class="list-disc pl-4 ml-2"><li>Make it long (16+ characters). Each character makes it exponentially harder to crack.</li><li>Make it random. We&#x27;re not as random as we think so you should use a password<!-- --> <a class="text-indigo-900 underline" href="https://1password.com/password-generator/">generator</a> (turn the &#x27;memorable&#x27; option on).</li><li>Make it memorable: 5 random words is much easier to remember but still harder to crack than 16+ random characters.</li></ul></li><li>The solution? Generate 5 random words like this `passion-ken-omit-verso-tortoise` - it&#x27;s long, random, and memorable. Write it down and practice it regularly until you commit it to memory.</li><li>If you plan to keep your 2FA codes separate from your password manager then create a new password (not your master password) and commit it to memory - don&#x27;t store it in your vault.</li><li>Ideally use a unique password for each QR code. Using the same one for all c
10odes should be fine if they&#x27;re accessed rarely and stored safely in the same place - akin to a using password manager.</li></ul></dd></div><div><dt class="font-semibold text-slate-900"><div class="my-10 h-px bg-gradient-to-r from-slate-200/0 via-slate-200 to-slate-200/0"></div><span class="flex items-center"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="-mt-0.5 mr-2 h-5 w-5"><path d="M10 2a5 5 0 00-5 5v2a2 2 0 00-2 2v5a2 2 0 002 2h10a2 2 0 002-2v-5a2 2 0 00-2-2H7V7a3 3 0 015.905-.75 1 1 0 001.937-.5A5.002 5.002 0 0010 2z"></path></svg>How do I decrypt a QR code?</span></dt><dd class="mt-4 space-y-8 leading-8"><ul class="list-disc pl-4"><li>Note: Encryption/decryption is done on your device and no data is collected about you.</li><li>Select/paste/drop/scan an encrypted QR code into the decrypt page. You can use your phone camera to scan a printed code for example.</li><li>Type in the original password to unlock the code. There is no way to recover a password if you have lost or forgotten it.</li><li>You can scan the decrypted code as a normal 2FA QR code.</li><li>Advanced users can decrypt codes using<!-- --> <a class="text-indigo-900 underline" href="https://github.com/kangabru/encrypt-qr-codes/blob/master/src/common/crypto.ts">Typescript</a> or<!-- --> <a class="text-indigo-900 underline" href="https://github.com/kangabru/encrypt-qr-codes/blob/master/python/decrypt.py">Python</a>.</li></ul></dd></div></dl></div></section></main>
10<script src="/_next/static/chunks/webpack-02c2044083adcafe.js" crossorigin="" async=""></script>
10<script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script>
10<script>self.__next_f.push([1,"1:HL[\"/_next/static/css/488dc5e4d81c8b87.css\",\"style\",{\"crossOrigin\":\"\"}]\n0:\"$L2\"\n"])</script>
10<script>self.__next_f.push([1,"3:I[7690,[],\"\"]\n5:I[5250,[\"250\",\"static/chunks/250-008d0470a59c611f.js\",\"749\",\"static/chunks/749-ddc5288e54df8968.js\",\"931\",\"static/chunks/app/page-4b17837dd87472aa.js\"],\"\"]\n6:I[1749,[\"250\",\"static/chunks/250-008d0470a59c611f.js\",\"749\",\"static/chunks/749-ddc5288e54df8968.js\",\"931\",\"static/chunks/app/page-4b17837dd87472aa.js\"],\"Image\"]\n8:I[5613,[],\"\"]\n9:I[1778,[],\"\"]\nb:I[8955,[],\"\"]\n7:T71b,"])</script>
10<script>self.__next_f.push([1,"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wEEEAAjACMAIwAjACUAIwAnACsAKwAnADYAOwA0ADsANgBQAEoAQwBDAEoAUAB6AFcAXQBXAF0AVwB6ALgAcwCHAHMAcwCHAHMAuACjAMUAoQCWAKEAxQCjASUA5gDMAMwA5gElAVMBHAENARwBUwGaAW8BbwGaAgQB6gIEAqMCowOLEQAjACMAIwAjACUAIwAnACsAKwAnADYAOwA0ADsANgBQAEoAQwBDAEoAUAB6AFcAXQBXAF0AVwB6ALgAcwCHAHMAcwCHAHMAuACjAMUAoQCWAKEAxQCjASUA5gDMAMwA5gElAVMBHAENARwBUwGaAW8BbwGaAgQB6gIEAqMCowOL/8IAEQgATwB4AwEiAAIRAQMRAf/EAC8AAAIDAQAAAAAAAAAAAAAAAAAEAQIDBQEBAQEBAQAAAAAAAAAAAAAAAAECAwT/2gAMAwEAAhADEAAAAGWBnqWGjJUakUX6auoFMs1gWubGAVNz0zRmJ8lwVaSi/Q53SBZmKTy1wiCly0EjIwdZM1nlaZ7yLsAETAlnqsBa5WusD4ARYCYCSAmAFMOlIjD4IU6QVJDFZzLpMNLmmdNwwew3wUNDTO83MS4XJOd//8QAMRAAAQMCAwcCBQQDAAAAAAAAAQACEQMhBBIUEzFBUVKSoRBhICIjY5EyNFNyRIGD/9oACAEBAAE/AMLhaNWiHvmZK0OH5O7locPyd3LQ4fk7uWhw/J3ctDh+Tu5aHD8ndy0tLVbK+XZytDheT+5aHDcn9y0OG5P7locNyf3LQ4bk/uWhw3J/csVhaNKiXsmZCwP7Zv8AZyDANzVFoyoCNwWRmYugyQAsreRQAG5f5/8AwVaNq6+4XCZDbmA0kATuU/VLS83vvXzva68CyBe2LAHdEp0ZTDpjksZ+07FhGPZQa1wgy70xE5LGDKfULQ0Z8t090PDDVGYyYlDcPTI7WZ4+XZRKrnI8mE2xJZ8wKpvLWuB32OZPNVpNiTFkBMZTaIlEgENZIvaBZYpj34bK0SZYh6YgSwCBvRLgKhcW2go1YDQ7NDTE7/Xiq2XO64kZZTAJaXfqg3BML6QBp52kACZv+ZTmENc4kC0crTaE6QzqFtyDAYJLpELgEPSrT2jYmFpxxdM7xCOHbLTNwZJj14rEZszgCbhCXggmLAray4ONxxiwQyCnLmOF7OIQkNAeIn3hPnODAOUcRNiuAXDfCB95UjmPh4quYcbyTuaiDDYEuNwJhRDrU3ZzciYUZxOch0QHLcRJmQfBV2gfN/bdIXAKQBdSz2/Cgch8PFVg41ItEcU1jz+r2/2m0KlnXJ32tJWwq/Kcj8wPVZClVY0ZkabyC4wTC4BDcr+yv7fDx+MqtV2LA7LN4Wv+0td9pHFVBY0PKOMcBJo+Vr/tLX/aU8fZDGOcJFHytW/+HyjjHNEml5VXEFjwwMm0rVP/AIPK1TzP0fKo1tswuyxdPYx7cr2zdabD9Hlaah0eVpqHQfytNQ6D+VpsP0eVpsP0efTTYfo8rTUOjytNQ6PKfRpVDLmXhabD9HlabD9HlMYxjYYIEr//xAAhEQACAgICAQUAAAAAAAAAAAABAgARA1ITIjEQEiBAQf/aAAgBAgEBPwB3cO3Y+ZyPsZyPsYrv27HxOR9jOR9jOR9jMJJSyf2E2SfUGr+CZWQUAPoqcddlNy8Opl4dTHKGvaCJeLUy8VjqZeLWGrNeJ//EABcRAQEBAQAAAAAAAAAAAAAAACEAEFD/2gAIAQMBAT8A4DM4zOf/2Q=="])</script>
10<script>self.__next_f.push([1,"2:[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/488dc5e4d81c8b87.css\",\"precedence\":\"next\",\"crossOrigin\":\"\"}]],[\"$\",\"$L3\",null,{\"buildId\":\"0pA1ZdbGeF4jUohpQcf6Q\",\"assetPrefix\":\"\",\"initialCanonicalUrl\":\"/\",\"initialTree\":[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"__PAGE__\",{},[\"$L4\",[\"$\",\"main\",null,{\"className\":\"relative min-h-screen w-full overflow-hidden border-y-4 border-indigo-500 bg-gray-50 px-5 pb-32 pt-12 sm:pt-16\",\"children\":[[\"$\",\"section\",null,{\"className\":\"absolute left-1/2 top-0 hidden w-full max-w-screen-2xl -translate-x-1/2 opacity-80 md:block\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute top-0 flex -translate-x-1/2 flex-col items-center text-indigo-500\",\"style\":{\"left\":\"10%\"},\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 10 150\",\"height\":150,\"children\":[\"$\",\"g\",null,{\"stroke\":\"currentColor\",\"strokeLinecap\":\"round\",\"strokeWidth\":6,\"children\":[[\"$\",\"line\",\"5\",{\"x1\":\"5\",\"y1\":5,\"x2\":\"5\",\"y2\":10,\"opacity\":0.8768772334567403}],[\"$\",\"line\",\"20\",{\"x1\":\"5\",\"y1\":20,\"x2\":\"5\",\"y2\":35,\"opacity\":0.5802299120099546}],[\"$\",\"line\",\"45\",{\"x1\":\"5\",\"y1\":45,\"x2\":\"5\",\"y2\":55,\"opacity\":0.30323941368067536}],[\"$\",\"line\",\"65\",{\"x1\":\"5\",\"y1\":65,\"x2\":\"5\",\"y2\":70,\"opacity\":0.2811130524806904}],[\"$\",\"line\",\"80\",{\"x1\":\"5\",\"y1\":80,\"x2\":\"5\",\"y2\":95,\"opacity\":0.5566043793066711}],[\"$\",\"line\",\"105\",{\"x1\":\"5\",\"y1\":105,\"x2\":\"5\",\"y2\":115,\"opacity\":0.935296556852022}],[\"$\",\"line\",\"125\",{\"x1\":\"5\",\"y1\":125,\"x2\":\"5\",\"y2\":140,\"opacity\":0.9393085480688246}]]}]}],[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"fill\":\"none\",\"viewBox\":\"0 0 24 24\",\"strokeWidth\":2,\"stroke\":\"currentColor\",\"aria-hidden\":\"true\",\"className\":\"h-20 w-20 rotate-6 scale-90 rounded-lg bg-red-200 p-2 text-red-800\",\"children\":[\"$\",\"path\",null,{\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"d\":\"M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M16 20h4M4 12h4m12 0h.01M5 8h2a1 1 0 001-1V5a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1zm12 0h2a1 1 0 001-1V5a1 1 0 00-1-1h-2a1 1 0 00-1 1v2a1 1 0 001 1zM5 20h2a1 1 0 001-1v-2a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1z\"}]}]]}],[\"$\",\"div\",null,{\"className\":\"absolute top-0 flex -translate-x-1/2 flex-col items-center text-indigo-500\",\"style\":{\"left\":\"25%\"},\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 10 75\",\"height\":75,\"children\":[\"$\",\"g\",null,{\"stroke\":\"currentColor\",\"strokeLinecap\":\"round\",\"strokeWidth\":6,\"children\":[[\"$\",\"line\",\"5\",{\"x1\":\"5\",\"y1\":5,\"x2\":\"5\",\"y2\":20,\"opacity\":0.8565888542324245}],[\"$\",\"line\",\"30\",{\"x1\":\"5\",\"y1\":30,\"x2\":\"5\",\"y2\":35,\"opacity\":0.9995947019871205}],[\"$\",\"line\",\"45\",{\"x1\":\"5\",\"y1\":45,\"x2\":\"5\",\"y2\":65,\"opacity\":0.32218003067377055}]]}]}],[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"fill\":\"none\",\"viewBox\":\"0 0 24 24\",\"strokeWidth\":2,\"stroke\":\"currentColor\",\"aria-hidden\":\"true\",\"className\":\"h-20 w-20 -rotate-2 rounded-lg bg-blue-200 p-2 text-blue-800\",\"children\":[\"$\",\"path\",null,{\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"d\":\"M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M16 20h4M4 12h4m12 0h.01M5 8h2a1 1 0 001-1V5a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1zm12 0h2a1 1 0 001-1V5a1 1 0 00-1-1h-2a1 1 0 00-1 1v2a1 1 0 001 1zM5 20h2a1 1 0 001-1v-2a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1z\"}]}]]}],[\"$\",\"div\",null,{\"className\":\"absolute top-0 flex -translate-x-1/2 flex-col items-center text-indigo-500\",\"style\":{\"left\":\"75%\"},\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 10 105\",\"height\":105,\"children\":[\"$\",\"g\",null,{\"stroke\":\"currentColor\",\"strokeLinecap\":\"round\",\"strokeWidth\":6,\"children\":[[\"$\",\"line\",\"5\",{\"x1\":\"5\",\"y1\":5,\"x2\":\"5\",\"y2\":30,\"opacity\":0.8351107083162705}],[\"$\",\"line\",\"40\",{\"x1\":\"5\",\"y1\":40,\"x2\":\"5\",\"y2\":45,\"opacity\":0.5714728714396757}
10],[\"$\",\"line\",\"55\",{\"x1\":\"5\",\"y1\":55,\"x2\":\"5\",\"y2\":70,\"opacity\":0.8704794049004032}],[\"$\",\"line\",\"80\",{\"x1\":\"5\",\"y1\":80,\"x2\":\"5\",\"y2\":95,\"opacity\":0.5566043793066711}]]}]}],[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"fill\":\"none\",\"viewBox\":\"0 0 24 24\",\"strokeWidth\":2,\"stroke\":\"currentColor\",\"aria-hidden\":\"true\",\"className\":\"h-20 w-20 rotate-3 scale-100 rounded-lg bg-orange-200 p-2 text-orange-800\",\"children\":[\"$\",\"path\",null,{\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"d\":\"M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M16 20h4M4 12h4m12 0h.01M5 8h2a1 1 0 001-1V5a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1zm12 0h2a1 1 0 001-1V5a1 1 0 00-1-1h-2a1 1 0 00-1 1v2a1 1 0 001 1zM5 20h2a1 1 0 001-1v-2a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1z\"}]}]]}],[\"$\",\"div\",null,{\"className\":\"absolute top-0 flex -translate-x-1/2 flex-col items-center text-indigo-500\",\"style\":{\"left\":\"90%\"},\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 10 170\",\"height\":170,\"children\":[\"$\",\"g\",null,{\"stroke\":\"currentColor\",\"strokeLinecap\":\"round\",\"strokeWidth\":6,\"children\":[[\"$\",\"line\",\"5\",{\"x1\":\"5\",\"y1\":5,\"x2\":\"5\",\"y2\":10,\"opacity\":0.8768772334567403}],[\"$\",\"line\",\"20\",{\"x1\":\"5\",\"y1\":20,\"x2\":\"5\",\"y2\":25,\"opacity\":0.6074644841453587}],[\"$\",\"line\",\"35\",{\"x1\":\"5\",\"y1\":35,\"x2\":\"5\",\"y2\":50,\"opacity\":0.31436873435944873}],[\"$\",\"line\",\"60\",{\"x1\":\"5\",\"y1\":60,\"x2\":\"5\",\"y2\":70,\"opacity\":0.564032362128853}],[\"$\",\"line\",\"80\",{\"x1\":\"5\",\"y1\":80,\"x2\":\"5\",\"y2\":95,\"opacity\":0.5566043793066711}],[\"$\",\"line\",\"105\",{\"x1\":\"5\",\"y1\":105,\"x2\":\"5\",\"y2\":125,\"opacity\":0.9196750530186872}],[\"$\",\"line\",\"135\",{\"x1\":\"5\",\"y1\":135,\"x2\":\"5\",\"y2\":140,\"opacity\":0.7788749029133999}],[\"$\",\"line\",\"150\",{\"x1\":\"5\",\"y1\":150,\"x2\":\"5\",\"y2\":160,\"opacity\":0.22122975207014306}]]}]}],[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"fill\":\"none\",\"viewBox\":\"0 0 24 24\",\"strokeWidth\":2,\"stroke\":\"currentColor\",\"aria-hidden\":\"true\",\"className\":\"h-20 w-20 -rotate-3 scale-95 rounded-lg bg-pink-200 p-2 text-pink-800\",\"children\":[\"$\",\"path\",null,{\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"d\":\"M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M16 20h4M4 12h4m12 0h.01M5 8h2a1 1 0 001-1V5a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1zm12 0h2a1 1 0 001-1V5a1 1 0 00-1-1h-2a1 1 0 00-1 1v2a1 1 0 001 1zM5 20h2a1 1 0 001-1v-2a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1z\"}]}]]}]]}],[\"$\",\"section\",null,{\"className\":\"relative flex flex-col items-center text-center\",\"children\":[\"$\",\"div\",null,{\"className\":\"relative z-10 flex flex-col items-center text-center\",\"children\":[[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"fill\":\"none\",\"viewBox\":\"0 0 24 24\",\"strokeWidth\":2,\"stroke\":\"currentColor\",\"aria-hidden\":\"true\",\"className\":\"mb-4 h-20 w-20 text-indigo-500\",\"children\":[\"$\",\"path\",null,{\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"d\":\"M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M16 20h4M4 12h4m12 0h.01M5 8h2a1 1 0 001-1V5a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1zm12 0h2a1 1 0 001-1V5a1 1 0 00-1-1h-2a1 1 0 00-1 1v2a1 1 0 001 1zM5 20h2a1 1 0 001-1v-2a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1z\"}]}],[\"$\",\"h1\",null,{\"className\":\"text-3xl font-bold leading-loose tracking-tight text-gray-900 sm:text-4xl\",\"children\":[\"Encrypt QR codes\",[\"$\",\"br\",null,{}],\"for private 2FA backups\"]}],[\"$\",\"p\",null,{\"className\":\"mt-6 max-w-xl text-lg text-gray-600\",\"children\":\"Securely encrypt and decrypt QR codes used for two-factor authentication. Safely store encrypted QR codes as photos or print them out.\"}],[\"$\",\"div\",null,{\"className\":\"mt-10 flex items-center justify-center gap-x-6\",\"children\":[[\"$\",\"$L5\",null,{\"href\":\"/encrypt\",\"className\":\"flex items-center rounded-md bg-indigo-600 px-3.5 py-2.5 text-lg font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\",\"children\":[[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 20 20\",\"fill\":\"currentColor\",\"aria-hidden\":\"true\",\"className\":\"-ml-1 mr-2 h-6 w-6\",\"children\":[\"$\",\"path\",null,{\"fillRule\":\"evenodd\",\"d\":\"M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z\",\"clipRule\":\"evenodd\"}]}],[\"$\",\"span\",null,{\"children\":\"Encrypt\"}]]}],[\"$\",\"$L5\",null,{\"href\":\"/decrypt\",\"className\":\"flex items-center rounded-md bg-indigo-600 px-3.5 py-2.5 text-lg font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\",\"children\":[[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 20 20\",\"fill\":\"currentColor\",\"aria-hidden\":\"true\",\"className\":\"-ml-1 mr-2 h-6 w-6\",\"children\":[\"$\",\"path\",null,{\"d\":\"M10 2a5 5 0 00-5 5v2a2 2 0 00-2 2v5a2 2 0 002 2h10a2 2 0 002-2v-5a2 2 0 00-2-2H7V7a3 3 0 015.905-.75 1 1 0 001.937-.5A5.002 5.002 0 0010 2z\"}]}],[\"$\",\"span\",null,{\"children\":\"Decrypt\"}]]}]]}],[\"$\",\"$L5\",null,{\"href\":\"https://github.com/kangabru/encrypt-qr-codes\",\"className\":\"mx-auto mt-5 flex items-center rounded-md px-3 py-2 font-medium text-black hover:bg-gray-200 hover:bg-opacity-75\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 98 96\",\"className\":\"-ml-1 -mt-0.5 mr-2 h-5 w-5\",\"aria-hidden\":\"true\",\"children\":[\"$\",\"path\",null,{\"fill\":\"currentColor\",\"fillRule\":\"evenodd\",\"clipRule\":\"evenodd\",\"d\":\"M48.854 0C21.839 0 0 22 0 49.217c0 21.756 13.993 40.172 33.405 46.69 2.427.49 3.316-1.059 3.316-2.3
1062 0-1.141-.08-5.052-.08-9.127-13.59 2.934-16.42-5.867-16.42-5.867-2.184-5.704-5.42-7.17-5.42-7.17-4.448-3.015.324-3.015.324-3.015 4.934.326 7.523 5.052 7.523 5.052 4.367 7.496 11.404 5.378 14.235 4.074.404-3.178 1.699-5.378 3.074-6.6-10.839-1.141-22.243-5.378-22.243-24.283 0-5.378 1.94-9.778 5.014-13.2-.485-1.222-2.184-6.275.486-13.038 0 0 4.125-1.304 13.426 5.052a46.97 46.97 0 0 1 12.214-1.63c4.125 0 8.33.571 12.213 1.63 9.302-6.356 13.427-5.052 13.427-5.052 2.67 6.763.97 11.816.485 13.038 3.155 3.422 5.015 7.822 5.015 13.2 0 18.905-11.404 23.06-22.324 24.283 1.78 1.548 3.316 4.481 3.316 9.126 0 6.6-.08 11.897-.08 13.526 0 1.304.89 2.853 3.316 2.364 19.412-6.52 33.405-24.935 33.405-46.691C97.707 22 75.788 0 48.854 0z\"}]}],[\"$\",\"span\",null,{\"children\":\"Star on GitHub\"}]]}]]}]}],[\"$\",\"$L6\",null,{\"src\":\"/images/ui-encrypt.png\",\"placeholder\":\"blur\",\"blurDataURL\":\"$7\",\"alt\":\"Encrypt UI\",\"width\":1542,\"height\":1018,\"className\":\"mx-auto mt-5 w-full max-w-3xl rounded-2xl shadow\"}],[\"$\",\"section\",null,{\"className\":\"mx-auto mt-16 max-w-2xl sm:mt-20 lg:mt-24 lg:max-w-4xl\",\"children\":[\"$\",\"dl\",null,{\"className\":\"grid max-w-xl grid-cols-1 gap-x-8 gap-y-10 lg:max-w-none lg:grid-cols-2 lg:gap-y-16\",\"children\":[[\"$\",\"div\",\"Secure Backups\",{\"className\":\"relative pl-16\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-base font-semibold leading-7 text-gray-900\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute left-0 top-0 flex h-10 w-10 items-center justify-center rounded-lg bg-indigo-600\",\"children\":[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 20 20\",\"fill\":\"currentColor\",\"aria-hidden\":\"true\",\"className\":\"h-6 w-6 text-white\",\"children\":[\"$\",\"path\",null,{\"fillRule\":\"evenodd\",\"d\":\"M4 3a2 2 0 00-2 2v10a2 2 0 002 2h12a2 2 0 002-2V5a2 2 0 00-2-2H4zm12 12H4l4-8 3 6 2-4 3 6z\",\"clipRule\":\"evenodd\"}]}]}],\"Secure Backups\"]}],[\"$\",\"dd\",null,{\"className\":\"mt-2 text-base leading-7 text-gray-600\",\"children\":\"Encrypted QR code images can be saved or printed for account recovery if your 2FA device is lost.\"}]]}],[\"$\",\"div\",\"Privacy Focused\",{\"className\":\"relative pl-16\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-base font-semibold leading-7 text-gray-900\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute left-0 top-0 flex h-10 w-10 items-center justify-center rounded-lg bg-indigo-600\",\"children\":[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 20 20\",\"fill\":\"currentColor\",\"aria-hidden\":\"true\",\"className\":\"h-6 w-6 text-white\",\"children\":[[\"$\",\"path\",null,{\"fillRule\":\"evenodd\",\"d\":\"M3.707 2.293a1 1 0 00-1.414 1.414l14 14a1 1 0 001.414-1.414l-1.473-1.473A10.014 10.014 0 0019.542 10C18.268 5.943 14.478 3 10 3a9.958 9.958 0 00-4.512 1.074l-1.78-1.781zm4.261 4.26l1.514 1.515a2.003 2.003 0 012.45 2.45l1.514 1.514a4 4 0 00-5.478-5.478z\",\"clipRule\":\"evenodd\"}],[\"$\",\"path\",null,{\"d\":\"M12.454 16.697L9.75 13.992a4 4 0 01-3.742-3.741L2.335 6.578A9.98 9.98 0 00.458 10c1.274 4.057 5.065 7 9.542 7 .847 0 1.669-.105 2.454-.303z\"}]]}]}],\"Privacy Focused\"]}],[\"$\",\"dd\",null,{\"className\":\"mt-2 text-base leading-7 text-gray-600\",\"children\":\"No data is collected about you and all QR code scanning, encryption, and decryption is done on your device.\"}]]}],[\"$\",\"div\",\"MIT Open Source\",{\"className\":\"relative pl-16\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-base font-semibold leading-7 text-gray-900\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute left-0 top-0 flex h-10 w-10 items-center justify-center rounded-lg bg-indigo-600\",\"children\":[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 20 20\",\"fill\":\"currentColor\",\"aria-hidden\":\"true\",\"className\":\"h-6 w-6 text-white\",\"children\":[\"$\",\"path\",null,{\"fillRule\":\"evenodd\",\"d\":\"M12.316 3.051a1 1 0 01.633 1.265l-4 12a1 1 0 11-1.898-.632l4-12a1 1 0 011.265-.633zM5.707 6.293a1 1 0 010 1.414L3.414 10l2.293 2.293a1 1 0 11-1.414 1.414l-3-3a1 1 0 010-1.414l3-3a1 1 0 011.414 0zm8.586 0a1 1 0 011.414 0l3 3a1 1 0 010 1.414l-3 3a1 1 0 11-1.414-1.414L16.586 10l-2.293-2.293a1 1 0 010-1.414z\",\"clipRule\":\"evenodd\"}]}]}],\"MIT Open Source\"]}],[\"$\",\"dd\",null,{\"className\":\"mt-2 text-base leading-7 text-gray-600\",\"children\":[[\"$\",\"$L5\",null,{\"href\":\"https://github.com/kangabru/encrypt-qr-codes\",\"children\":\"Review the code\",\"className\":\"text-indigo-900 underline\"}],\" and reuse it however you like. \",[\"$\",\"$L5\",null,{\"href\":\"https://github.com/kangabru/encrypt-qr-codes#deploy\",\"children\":\"Self-host\",\"className\":\"text-indigo-900 underline\"}],\" or run the\",\" \",[\"$\",\"$L5\",null,{\"href\":\"https://github.com/kangabru/encrypt-qr-codes#develop\",\"children\":\"site locally\",\"className\":\"text-indigo-900 underline\"}],\" for fully offline encryption.\",\" \"]}]]}],[\"$\",\"div\",\"Advanced Security\",{\"className\":\"relative pl-16\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-base font-semibold leading-7 text-gray-900\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute left-0 top-0 flex h-10 w-10 items-center justify-center rounded-lg bg-indigo-600\",\"children\":[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 20 20\",\"fill\":\"currentColor\",\"aria-hidden\":\"true\",\"className\":\"h-6 w-6 text-white\",\"children\":[[\"$\",\"path\",null,{\"fillRule\":\"evenodd\",\"d\":\"M6.625 2.655A9 9 0 0119 11a1 1 0 11-2 0 7 7 0 00-9.625-6.492 1 1 0 11-.75-1.853zM4.662 4.959A1 1 0 014.75 6.37 6.97 6.97 0 003 11a1 1 0 11-2 0 8.97 8.97 0 012.25-5.953 1 1 0 011.412-.088z\",\"clipRule\":\"evenodd\"}],[\"$\",\"path\",null,{\"fillRule\":\"evenodd\",\"d\":\"M5 11a5 5 0 1110 0 1 1 0 11-2 0 3 3 0 10-6 0c0 1.677-.345 3.276-.968 4.729a1 1 0 11-1.838-.789A9.964 9.964 0 005 11zm8.921 2.012a1 1 0 01.831 1.145 19.86 19.86 0 01-.545 2.436 1 1 0 11-1.92-.558c.207-.713.371-1.445.49-2.192a1 1 0 011.144-.83z\",\"clipRule\":\"evenodd\"}],[\"$\",\"path\",null,{\"fillRule\":\"evenodd\",\"d\":\"M10 10a1 1 0 011 1c0 2.236-.46 4.368-1.29 6.304a1 1 0 01-1.838-.789A13.952 13.952 0 009 11a1 1 0 011-1z\",\"clipRule\":\"evenodd\"}]]}]}],\"Advanced Security\"]}],[\"$\",\"dd\",null,{\"className\":\"mt-2 text-base leading-7 text-gray-600\",\"children\":[\"Encryption uses \",[\"$\",\"$L5\",null,{\"href\":\"https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/encrypt#supported_algorithms\",\"children\":\"AES-GCM and PBKDF2\",\"className\":\"text-indigo-900 underline\"}],\" \",\"with a salted 256-bit key. View the process in\",\" \",[\"$\",\"$L5\",null,{\"href\":\"https://github.com/kangabru/encrypt-qr-codes/blob/master/src/common/crypto.ts\",\"children\":\"Typescript\",\"className\":\"text-indigo-900 underline\"}],\" or\",\" \",[\"$\",\"$L5\",null,{\"href\":\"https://github.com/kangabru/encrypt-qr-codes/blob/master/python/decrypt.py\",\"children\":\"Python\",\"className\":\"text-indigo-900 underline\"}],\".\"]}]]}]]}]}],[\"$\",\"section\",null,{\"className\":\"relative mx-auto mt-20 max-w-screen-2xl\",\"children\":[[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"fill\":\"none\",\"viewBox\":\"0 0 24 24\",\"strokeWidth\":2,\"stroke\":\"currentColor\",\"aria-hidden\":\"true\",\"className\":\"absolute left-10 top-1/4 h-48 w-48 rotate-6 text-indigo-500 opacity-5\",\"children\":[\"$\",\"path\",null,{\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"d\":\"M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M16 20h4M4 12h4m12 0h.01M5 8h2a1 1 0 001-1V5a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1zm12 0h2a1 1 0 001-1V5a1 1 0 00-1-1h-2a1 1 0 00-1 1v2a1 1 0 001 1zM5 20h2a1 1 0 001-1v-2a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1z\"}]}],[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"fill\":\"none\",\"viewBox\":\"0 0 24 24\",\"strokeWidth\":2,\"stroke\":\"currentColor\",\"aria-hidden\":\"true\",\"className\":\"absolute -right-5 top-1/2 h-64 w-64 -rotate-3 text-indigo-500 opacity-5\",\"children\":[\"$\",\"path\",null,{\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"d\":\"M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M16 20h4M4 12h4m12 0h.01M5 8h2a1 1 0 001-1V5a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1zm12 0h2a1 1 0 001-1V5a1 1 0 00-1-1h-2a1 1 0 00-1 1v2a1 1 0 001 1zM5 20h2a1 1 0 001-1v-2a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1z\"}]}],[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"fill\":\"none\",\"viewBox\":\"0 0 24 24\",\"strokeWidth\":2,\"stroke\":\"currentColor\",\"aria-hidden\":\"true\",\"className\":\"absolute -left-5 top-[80%] h-52 w-52 rotate-3 text-indigo-500 opacity-5\",\"children\":[\"$\",\"path\",null,{\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"d\":\"M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M16 20h4M4 12h4m12 0h.01M5 8h2a1 1 0 001-1V5a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1zm12 0h2a1 1 0 001-1V5a1 1 0 00-1-1h-2a1 1 0 00-1 1v2a1 1 0 001 1zM5 20h2a1 1 0 001-1v-2a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1z\"}]}],[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-2xl\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-xl font-bold leading-10 tracking-tight text-gray-900\",\"children\":\"Frequently Asked Questions\"}],[\"$\",\"dl\",null,{\"children\":[[\"$\",\"div\",\"0\",{\"children\":[[\"$\",\"dt\",null,{\"className\":\"font-semibold text-slate-900\",\"children\":[[\"$\",\"div\",null,{\"className\":\"my-10 h-px bg-gradient-to-r from-slate-200/0 via-slate-200 to-slate-200/0\"}],\"Who is this for?\"]}],[\"$\",\"dd\",null,{\"className\":\"mt-4 space-y-8 leading-8\",\"children\":\"Security concious people who want to backup their 2FA codes. You might already use a service like Authy but want extra redundancy and flexibility. The encrypted QR codes are just images that you can safely save in Whatsapp, a photo gallery, and even print them out.\"}]]}],[\"$\",\"div\",\"1\",{\"children\":[[\"$\",\"dt\",null,{\"className\":\"font-semibold text-slate-900\",\"children\":[[\"$\",\"div\",null,{\"className\":\"my-10 h-px bg-gradient-to-r from-slate-200/0 via-slate-200 to-slate-200/0\"}],\"What is a QR code?\"]}],[\"$\",\"dd\",null,{\"className\":\"mt-4 space-y-8 leading-8\",\"children\":[\"$\",\"p\",null,{\"className\":\"flex\",\"children\":[[\"$\",\"span\",null,{\"children\":\"A QR (quick-response) code is a barcode that's easy to scan and contains useful data. They are blocky, black/white, square images which you usually scan when adding two-factor auth to an account.\"}],[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"fill\":\"none\",\"viewBox\":\"0 0 24 24\",\"strokeWidth\":2,\"stroke\":\"currentColor\",\"aria-hidden\":\"true\",\"className\":\"ml-2 h-28 w-28 flex-shrink-0 text-gray-700\",\"children\":[\"$\",\"path\",null,{\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"d\":\"M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M16 20h4M4 12h4m12 0h.01M5 8h2a1 1 0 001-1V5a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1zm12 0h2a1 1 0 001-1V5a1 1 0 00-1-1h-2a1 1 0 00-1 1v2a1 1 0 001 1zM5 20h2a1 1 0 001-1v-2a1 1 0 00-1-1H5a1 1 0 00-1 1v2a1 1 0 001 1z\"}]}]]}]}]]}],[\"$\",\"div\",\"2\",{\"children\":[[\"$\",\"dt\",null,{\"className\":\"font-semibold text-slate-900\",\"children\":[[\"$\",\"div\",null,{\"className\":\"my-10 h-px bg-gradient-to-r from-slate-200/0 via-slate-200 to-slate-200/0\"}],\"What is two-factor auth (2FA)?\"]}],[\"$\",\"dd\",null,{\"className\":\"mt-4 space-y-8 leading-8\",\"children\":[\"$\",\"ul\",null,{\"className\":\"list-disc pl-4\",\"children\":[[\"$\",\"li\",\"0\",{\"children\":\"Two-factor authentication (2FA) helps protect your online accounts from being accessed by someone who has access to your password.\"}],[\"$\",\"li\",\"1\",{\"children\":\"You usually set up 2FA by scanning a QR code to link the service with an authenticator app on your phone. The app generates a random co
10de every few seconds which you fill into the website when asked.\"}],[\"$\",\"li\",\"2\",{\"children\":\"By knowing your password and filling in the 2FA code, you verify two factors: something you know and something you have. This makes it much harder to hack an account even if someone knows your password.\"}]]}]}]]}],[\"$\",\"div\",\"3\",{\"children\":[[\"$\",\"dt\",null,{\"className\":\"font-semibold text-slate-900\",\"children\":[[\"$\",\"div\",null,{\"className\":\"my-10 h-px bg-gradient-to-r from-slate-200/0 via-slate-200 to-slate-200/0\"}],\"Why should I backup 2FA codes?\"]}],[\"$\",\"dd\",null,{\"className\":\"mt-4 space-y-8 leading-8\",\"children\":\"If you lose or break your 2FA device you could lose access to some accounts forever - even if you have the password. We often set up 2FA with our most important accounts so losing access could be a huge loss of data e.g. photos, emails, and documents. You should absolutely backup 2FA codes and in multiple places.\"}]]}],[\"$\",\"div\",\"4\",{\"children\":[[\"$\",\"dt\",null,{\"className\":\"font-semibold text-slate-900\",\"children\":[[\"$\",\"div\",null,{\"className\":\"my-10 h-px bg-gradient-to-r from-slate-200/0 via-slate-200 to-slate-200/0\"}],\"What's wrong with Authy?\"]}],[\"$\",\"dd\",null,{\"className\":\"mt-4 space-y-8 leading-8\",\"children\":[\"$\",\"ul\",null,{\"className\":\"list-disc pl-4\",\"children\":[[\"$\",\"li\",\"0\",{\"children\":[[\"$\",\"$L5\",null,{\"href\":\"https://authy.com/\",\"children\":\"Authy\",\"className\":\"text-indigo-900 underline\"}],\" is a great authenticator app that can double as a backup by saving your 2FA codes for you. However, this is opt-in and you must now rely on a private service. If you lose access to Authy, you lose all of your 2FA codes.\"]}],[\"$\",\"li\",\"1\",{\"children\":[\"One problem is that Authy is linked to your mobile phone number and\",\" \",[\"$\",\"$L5\",null,{\"href\":\"https://authy.com/blog/how-the-authy-two-factor-backups-work/\",\"children\":\"you must receive an sms\",\"className\":\"text-indigo-900 underline\"}],\" to gain access to your account. If you lose your phone \u0026 SIM then it's up to your phone provider to give you that number again, and that could take weeks.\"]}],[\"$\",\"li\",\"2\",{\"children\":\"So definitely use a service like Authy, but it's a good idea to have extra backups. Encrypted QR codes are just images that you can safely save in Whatsapp, a photo gallery, and even print them out.\"}]]}]}]]}],[\"$\",\"div\",\"5\",{\"children\":[[\"$\",\"dt\",null,{\"className\":\"font-semibold text-slate-900\",\"children\":[[\"$\",\"div\",null,{\"className\":\"my-10 h-px bg-gradient-to-r from-slate-200/0 via-slate-200 to-slate-200/0\"}],\"What's wrong with 1Password?\"]}],[\"$\",\"dd\",null,{\"className\":\"mt-4 space-y-8 leading-8\",\"children\":[\"$\",\"ul\",null,{\"className\":\"list-disc pl-4\",\"children\":[[\"$\",\"li\",\"0\",{\"children\":\"1Password is a great password manager that can double as a backup by saving your 2FA codes for you. This is convenient but in the (unlikely) event that your vault is compromised then your 2FA codes won't protect those accounts.\"}],[\"$\",\"li\",\"1\",{\"children\":[[\"$\",\"$L5\",null,{\"href\":\"https://1password.com/features/two-factor-authentication/\",\"children\":\"They claim\",\"className\":\"text-indigo-900 underline\"}],\" that most hacks made are not by compromising your vault, but by guessing your password or finding it in a data breach. This is true but a vault is a high value target and even a breach on LastPass was\",\" \",[\"$\",\"$L5\",null,{\"href\":\"https://en.wikipedia.org/wiki/LastPass#Security_incidents\",\"children\":\"made\",\"className\":\"text-indigo-900 underline\"}],\" by\",\" \",[\"$\",\"$L5\",null,{\"href\":\"https://blog.lastpass.com/2023/03/security-incident-update-recommended-actions/\",\"children\":\"hacking\",\"className\":\"text-indigo-900 underline\"}],\" the\",\" \",[\"$\",\"$L5\",null,{\"href\":\"https://support.lastpass.com/s/document-item?language=en_US\u0026bundleId=lastpass\u0026topicId=LastPass/incident-2-details.html\u0026_LANG=enus\",\"children\":\"corporate vault\",\"className\":\"text-indigo-900 underline\"}],\".\"]}],[\"$\",\"li\",\"2\",{\"children\":\"So if you want to separate your 2FA codes from your password manager then encrypting and backing up your 2FA codes is a good solution.\"}]]}]}]]}],[\"$\",\"div\",\"6\",{\"children\":[[\"$\",\"dt\",null,{\"className\":\"font-semibold text-slate-900\",\"children\":[[\"$\",\"div\",null,{\"className\":\"my-10 h-px bg-gradient-to-r from-slate-200/0 via-slate-200 to-slate-200/0\"}],\"Can I rely on this website?\"]}],[\"$\",\"dd\",null,{\"className\":\"mt-4 space-y-8 leading-8\",\"children\":[\"Yes but the great thing is, you don't have to! This website is fully open source so you can control how you use it.\",\" \",[\"$\",\"$L5\",null,{\"href\":\"https://github.com/kangabru/encrypt-qr-codes\",\"children\":\"Fork the code\",\"className\":\"text-indigo-900 underline\"}],\" and reuse it however you like, \",[\"$\",\"$L5\",null,{\"href\":\"https://github.com/kangabru/encrypt-qr-codes#deploy\",\"children\":\"self-host\",\"className\":\"text-indigo-900 underline\"}],\" it, or run the\",\" \",[\"$\",\"$L5\",null,{\"href\":\"https://github.com/kangabru/encrypt-qr-codes#develop\",\"children\":\"site locally\",\"className\":\"text-indigo-900 underline\"}],\" for fully offline use.\",\" \",\"Decryption is language agnostic so you can always re
10cover an encrypted QR code in future. Here are examples in both\",\" \",[\"$\",\"$L5\",null,{\"href\":\"https://github.com/kangabru/encrypt-qr-codes/blob/master/src/common/crypto.ts\",\"children\":\"Typescript\",\"className\":\"text-indigo-900 underline\"}],\" and\",\" \",[\"$\",\"$L5\",null,{\"href\":\"https://github.com/kangabru/encrypt-qr-codes/blob/master/python/decrypt.py\",\"children\":\"Python\",\"className\":\"text-indigo-900 underline\"}],\".\"]}]]}],[\"$\",\"div\",\"7\",{\"children\":[[\"$\",\"dt\",null,{\"className\":\"font-semibold text-slate-900\",\"children\":[[\"$\",\"div\",null,{\"className\":\"my-10 h-px bg-gradient-to-r from-slate-200/0 via-slate-200 to-slate-200/0\"}],[\"$\",\"span\",null,{\"className\":\"flex items-center\",\"children\":[[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 20 20\",\"fill\":\"currentColor\",\"aria-hidden\":\"true\",\"className\":\"-mt-0.5 mr-2 h-5 w-5\",\"children\":[\"$\",\"path\",null,{\"fillRule\":\"evenodd\",\"d\":\"M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z\",\"clipRule\":\"evenodd\"}]}],\"How are codes encrypted?\"]}]]}],[\"$\",\"dd\",null,{\"className\":\"mt-4 space-y-8 leading-8\",\"children\":[\"$\",\"ul\",null,{\"className\":\"list-disc pl-4\",\"children\":[[\"$\",\"li\",\"0\",{\"children\":\"Note: Encryption/decryption is done on your device and no data is collected about you.\"}],[\"$\",\"li\",\"1\",{\"children\":\"A QR Code is scanned to decode its plaintext content.\"}],[\"$\",\"li\",\"2\",{\"children\":[\"The plaintext is encrypted into ciphertext as follows:\",[\"$\",\"ul\",null,{\"className\":\"list-disc pl-4 ml-2\",\"children\":[[\"$\",\"li\",\"0\",{\"children\":[[\"$\",\"$L5\",null,{\"href\":\"https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/deriveKey#pbkdf2\",\"children\":\"PBKDF2\",\"className\":\"text-indigo-900 underline\"}],\" derives a 256 bit key from the password and random salt.\"]}],[\"$\",\"li\",\"1\",{\"children\":[[\"$\",\"$L5\",null,{\"href\":\"https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/encrypt#supported_algorithms\",\"children\":\"AES-GCM\",\"className\":\"text-indigo-900 underline\"}],\" with random init values (IV) encrypts the data.\"]}],[\"$\",\"li\",\"2\",{\"children\":[\"Cryptographically strong random data is provided by\",\" \",[\"$\",\"$L5\",null,{\"href\":\"https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\",\"children\":\"Crypto\",\"className\":\"text-indigo-900 underline\"}],\".\"]}]]}]]}],[\"$\",\"li\",\"3\",{\"children\":[\"$\",\"div\",\"0\",{\"className\":\"sm:flex\",\"children\":[[\"$\",\"p\",null,{\"className\":\"mr-2 flex-1\",\"children\":[\"The ciphertext, salt, and IV are encoded into a text format and saved as a JSON object. The data is encoded into a new encrypted QR code.\",\" \",[\"$\",\"$L5\",null,{\"href\":\"https://github.com/kangabru/encrypt-qr-codes/blob/master/src/common/crypto.ts\",\"children\":\"View the process here\",\"className\":\"text-indigo-900 underline\"}],\".\"]}],[\"$\",\"p\",\"0\",{\"className\":\"text-mono whitespace-pre-wrap rounded-md border border-gray-200 bg-white px-3 py-2 text-sm shadow\",\"children\":\"{\\n  \\\"iv\\\":\\\"5a7e0a...\\\",\\n  \\\"salt\\\":\\\"74c98...\\\",\\n  \\\"cipherText\\\":\\\"0e50b...\\\",\\n  \\\"hint\\\":\\\"Google Account\\\",\\n  \\\"date\\\":\\\"2024-01-01\\\"\\n}\"}]]}]}]]}]}]]}],[\"$\",\"div\",\"8\",{\"children\":[[\"$\",\"dt\",null,{\"className\":\"font-semibold text-slate-900\",\"children\":[[\"$\",\"div\",null,{\"className\":\"my-10 h-px bg-gradient-to-r from-slate-200/0 via-slate-200 to-slate-200/0\"}],[\"$\",\"span\",null,{\"className\":\"flex items-center\",\"children\":[[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 20 20\",\"fill\":\"currentColor\",\"aria-hidden\":\"true\",\"className\":\"-mt-0.5 mr-2 h-5 w-5\",\"children\":[\"$\",\"path\",null,{\"fillRule\":\"evenodd\",\"d\":\"M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z\",\"clipRule\":\"evenodd\"}]}],\"How do I encrypt a 2FA code?\"]}]]}],[\"$\",\"dd\",null,{\"className\":\"mt-4 space-y-8 leading-8\",\"children\":[\"$\",\"ul\",null,{\"className\":\"list-disc pl-4\",\"children\":[[\"$\",\"li\",\"0\",{\"children\":\"Log into an account and follow their instructions to set up 2FA. Stop when they present you with a QR code.\"}],[\"$\",\"li\",\"1\",{\"children\":\"Before you scan the QR code with your auth app, first encrypt a copy of the QR code with this website.\"}],[\"$\",\"li\",\"2\",{\"children\":\"Either screenshot, copy/paste, or scan the QR code with a camera and encrypt it. The following Q\u0026A has more details.\"}],[\"$\",\"li\",\"3\",{\"children\":\"Download the encrypted QR code and save or print the image in multiple places as a backup.\"}],[\"$\",\"li\",\"4\",{\"children\":\"Continue setting up 2FA with the original QR code as normal with your authenticator app.\"}]]}]}]]}],[\"$\",\"div\",\"9\",{\"children\":[[\"$\",\"dt\",null,{\"className\":\"font-semibold text-slate-900\",\"children\":[[\"$\",\"div\",null,{\"className\":\"my-10 h-px bg-gradient-to-r from-slate-200/0 via-slate-200 to-slate-200/0\"}],[\"$\",\"span\",null,{\"className\":\"flex items-center\",\"children\":[[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 20 20\",\"fill\":\"currentColor\",\"aria-hidden\":\"true\",\"className\":\"-mt-0.5 mr-2 h-5 w-5\",\"children\":[\"$\",\"path\",null,{\"fillRule\":\"evenodd\",\"d\":\"M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z\",\"clipRule\":\"evenodd\"}]}],\"How do I encrypt a QR code?\"]}]]}],[\"$\",\"dd\",null,{\"className\":\"mt-4 space-y-8 leading-8\",\"children\":[\"$\",\"ul\",null,{\"className\":\"list-disc pl-4\",\"children\":[[\"$\",\"li\",\"0\",{\"children\":[\"Scan a QR code by selecting a file, copy \u0026 paste, drag \u0026 drop, or scanning it via camera. E.g:\",[\"$\",\"ul\",null,{\"className\":\"list-disc pl-4 ml-2\",\"children\":[[\"$\",\"li\",\"0\",{\"children\":\"Scan a QR code on your phone via your laptop webcam.\"}],[\"$\",\"li\",\"1\",{\"children\":\"Scan a printed QR code with your mobile camera.\"}],[\"$\",\"li\",\"2\",{\"children\":\"Screenshot the QR code, save, then select the image file.\"}],[\"$\",\"li\",\"3\",{\"children\":\"Right click and copy the QR code, then 'Ctrl+V' to paste here.\"}]]}]]}],[\"$\",\"li\",\"1\",{\"children\":\"Type an unencrypted hint to remember what the QR code is for.\"}],[\"$\",\"li\",\"2\",{\"children\":\"Type a secure password to encrypt the QR code with. You MUST remember the password to unlock it again - this is unrecoverable if you forget it. Ideally use a unique password for each QR code.\"}],[\"$\",\"li\",\"3\",{\"children\":\"Download the encrypted QR code and save or print the image in multiple places as a backup.\"}]]}]}]]}],[\"$\",\"div\",\"10\",{\"children\":[[\"$\",\"dt\",null,{\"className\":\"font-semibold text-slate-900\",\"children\":[[\"$\",\"div\",null,{\"className\":\"my-10 h-px bg-gradient-to-r from-slate-200/0 via-slate-200 to-slate-200/0\"}],[\"$\",\"span\",null,{\"className\":\"flex items-center\",\"children\":[[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 20 20\",\"fill\":\"currentColor\",\"aria-hidden\":\"true\",\"className\":\"-mt-0.5 mr-2 h-5 w-5\",\"children\":[\"$\",\"path\",null,{\"fillRule\":\"evenodd\",\"d\":\"M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z\",\"clipRule\":\"evenodd\"}]}],\"How do I choose and store a password?\"]}]]}],[\"$\",\"dd\",null,{\"className\":\"mt-4 space-y-8 leading-8\",\"children\":[\"$\",\"ul\",null,{\"className\":\"list-disc pl-4\",\"children\":[[\"$\",\"li\",\"0\",{\"children\":[\"1Password has good tips \",[\"$\",\"$L5\",null,{\"href\":\"https://support.1password.com/strong-account-password/\",\"children\":\"here\",\"className\":\"text-indigo-900 underline\"}],\" \",\"and \",[\"$\",\"$L5\",null,{\"href\":\"https://support.1password.com/pbkdf2/\",\"children\":\"here\",\"className\":\"text-indigo-900 underline\"}],\" for choosing a password:\",[\"$\",\"ul\",null,{\"className\":\"list-disc pl-4 ml-2\",\"children\":[[\"$\",\"li\",\"0\",{\"children\":\"Make it long (16+ characters). Each character makes it exponentially harder to crack.\"}],[\"$\",\"li\",\"1\",{\"children\":[\"Make it random. We're not as random as we think so you should use a password\",\" \",[\"$\",\"$L5\",null,{\"href\":\"https://1password.com/password-generator/\",\"children\":\"generator\",\"className\":\"text-indigo-900 underline\"}],\" (turn the 'memorable' option on).\"]}],[\"$\",\"li\",\"2\",{\"children\":\"Make it memorable: 5 random words is much easier to remember but still harder to crack than 16+ random characters.\"}]]}]]}],[\"$\",\"li\",\"1\",{\"children\":\"The solution? Generate 5 random words like this `passion-ken-omit-verso-tortoise` - it's long, random, and memorable. Write it down and practice it regularly until you commit it to memory.\"}],[\"$\",\"li\",\"2\",{\"children\":\"If you plan to keep your 2FA codes separate from your password manager then create a new password (not your master password) and commit it to memory - don't store it in your vault.\"}],[\"$\",\"li\",\"3\",{\"children\":\"Ideally use a unique password for each QR code. Using the same one for all c
10odes should be fine if they're accessed rarely and stored safely in the same place - akin to a using password manager.\"}]]}]}]]}],[\"$\",\"div\",\"11\",{\"children\":[[\"$\",\"dt\",null,{\"className\":\"font-semibold text-slate-900\",\"children\":[[\"$\",\"div\",null,{\"className\":\"my-10 h-px bg-gradient-to-r from-slate-200/0 via-slate-200 to-slate-200/0\"}],[\"$\",\"span\",null,{\"className\":\"flex items-center\",\"children\":[[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 20 20\",\"fill\":\"currentColor\",\"aria-hidden\":\"true\",\"className\":\"-mt-0.5 mr-2 h-5 w-5\",\"children\":[\"$\",\"path\",null,{\"d\":\"M10 2a5 5 0 00-5 5v2a2 2 0 00-2 2v5a2 2 0 002 2h10a2 2 0 002-2v-5a2 2 0 00-2-2H7V7a3 3 0 015.905-.75 1 1 0 001.937-.5A5.002 5.002 0 0010 2z\"}]}],\"How do I decrypt a QR code?\"]}]]}],[\"$\",\"dd\",null,{\"className\":\"mt-4 space-y-8 leading-8\",\"children\":[\"$\",\"ul\",null,{\"className\":\"list-disc pl-4\",\"children\":[[\"$\",\"li\",\"0\",{\"children\":\"Note: Encryption/decryption is done on your device and no data is collected about you.\"}],[\"$\",\"li\",\"1\",{\"children\":\"Select/paste/drop/scan an encrypted QR code into the decrypt page. You can use your phone camera to scan a printed code for example.\"}],[\"$\",\"li\",\"2\",{\"children\":\"Type in the original password to unlock the code. There is no way to recover a password if you have lost or forgotten it.\"}],[\"$\",\"li\",\"3\",{\"children\":\"You can scan the decrypted code as a normal 2FA QR code.\"}],[\"$\",\"li\",\"4\",{\"children\":[\"Advanced users can decrypt codes using\",\" \",[\"$\",\"$L5\",null,{\"href\":\"https://github.com/kangabru/encrypt-qr-codes/blob/master/src/common/crypto.ts\",\"children\":\"Typescript\",\"className\":\"text-indigo-900 underline\"}],\" or\",\" \",[\"$\",\"$L5\",null,{\"href\":\"https://github.com/kangabru/encrypt-qr-codes/blob/master/python/decrypt.py\",\"children\":\"Python\",\"className\":\"text-indigo-900 underline\"}],\".\"]}]]}]}]]}]]}]]}]]}]]}],null]]},[null,[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"className\":\"bg-gray-100 !font-mono\",\"children\":[\"$\",\"$L8\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"loading\":\"$undefined\",\"loadingStyles\":\"$undefined\",\"loadingScripts\":\"$undefined\",\"hasLoading\":false,\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L9\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[],\"styles\":null}]}]}],null]],\"initialHead\":[false,\"$La\"],\"globalErrorComponent\":\"$b\"}]]\n"])</script>
10<script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"Encrypt QR Codes\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Securely encrypt and decrypt QR codes used for two-factor authentication. Safely store encrypted QR codes in your photo gallery or print them out.\"}],[\"$\",\"link\",\"4\",{\"rel\":\"canonical\",\"href\":\"https://encrypt-qr-codes.netlify.app/\"}],[\"$\",\"link\",\"5\",{\"rel\":\"alternate\",\"hrefLang\":\"en-US\",\"href\":\"https://encrypt-qr-codes.netlify.app/en-US\"}],[\"$\",\"link\",\"6\",{\"rel\":\"alternate\",\"hrefLang\":\"de-DE\",\"href\":\"https://encrypt-qr-codes.netlify.app/de-DE\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:title\",\"content\":\"Encrypt QR Codes\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:description\",\"content\":\"Securely encrypt and decrypt QR codes used for two-factor authentication. Safely store encrypted QR codes in your photo gallery or print them out.\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:image:type\",\"content\":\"image/png\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:image\",\"content\":\"https://encrypt-qr-codes.netlify.app/opengraph-image.png?856f7a7127d81ade\"}],[\"$\",\"meta\",\"13\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"14\",{\"name\":\"twitter:title\",\"content\":\"Encrypt QR Codes\"}],[\"$\",\"meta\",\"15\",{\"name\":\"twitter:description\",\"content\":\"Securely encrypt and decrypt QR codes used for two-factor authentication. Safely store encrypted QR codes in your photo gallery or print them out.\"}],[\"$\",\"meta\",\"16\",{\"name\":\"twitter:image:type\",\"content\":\"image/png\"}],[\"$\",\"meta\",\"17\",{\"name\":\"twitter:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"18\",{\"name\":\"twitter:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"19\",{\"name\":\"twitter:image\",\"content\":\"https://encrypt-qr-codes.netlify.app/opengraph-image.png?856f7a7127d81ade\"}],[\"$\",\"link\",\"20\",{\"rel\":\"icon\",\"href\":\"/icon.svg?e44b09a5254a3dad\",\"type\":\"image/svg+xml\",\"sizes\":\"any\"}]]\n"])</script>
10<script>self.__next_f.push([1,"4:null\n"])</script>
10<script>self.__next_f.push([1,""])</script>
10</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.