Возможно, вам следует переосмыслить свой подход.
Ваше заявление Я сделал основные задания, чтобы избежать таких вещей, как захват или снимок экрана QRCode уже подразумевает, что система, которую вы связываете для создания, небезопасна .
Если вы пытаетесь создать что-то безопасное, вам следует использовать подход, использующий систему, созданную с нуля, с учетом безопасности, а НЕ использующую (небезопасную) систему и пытающуюся исправить ее ненадежность. это (псевдо) безопасно. Попытка сделать небезопасную систему безопасной за счет защиты некоторых крайних случаев никогда не защитит вашу систему. Всегда найдутся люди, которые найдут другой крайний случай для использования вашей системы.
Вот несколько примеров того, как ваша система может быть использована, даже если вы попытаетесь обезопасить ее, узнав, настоящий ли это QR-код или его изображение:
- Воспользуйтесь внешним приложением (например, устройством записи Az-screen), запишите видео с экрана, а затем извлеките изображение с QR-кодом из видео. Отображение на другом телефоне всегда будет выглядеть оригинально.
- Сфотографируйте QR-код, теперь вы можете создать QR-код с нуля, установив каждый черно-белый пиксель вручную в программном обеспечении для создания изображений или аналогичный. Отображение этого на другом телефоне снова будет выглядеть как настоящий QR-код.
Как вы можете видеть, есть несколько случаев, когда ваша система может быть использована, и особенно вы не можете исправить последнюю точку.
Таким образом, даже если вам удастся определить, указывает ли камера на реальный QR-код или его фотографию (что также трудно сделать, см. Ответ @ItsMeNaira), ваша система не будет защищена, поскольку вы не можете обезопасить небезопасную систему, исправив ее крайние случаи.
Опять: Никогда пытаясь защитить систему, которая не была создана с учетом безопасности, путем исправления угловых случаев, вы всегда потерпит неудачу. Вместо этого попытайтесь найти лучший подход, построенный с учетом требований безопасности с нуля.