-
-
Save ooosokol/605eab15b856d46d7e45f27e89040b8d to your computer and use it in GitHub Desktop.
public class MegatronSokolServiceImpl implements MegatronSokolService { | |
private static final String secret; | |
private final AtomicLong counter; | |
public MegatronSokolServiceImpl(Long startValue, String secret) { | |
counter = new AtomicLong(startValue); | |
this.secret = secret; | |
} | |
@Override | |
public String getMegatronTestToken() { | |
return DigestUtils.md5Hex(DigestUtils.md5Hex(String.valueOf(counter.get()))); | |
} | |
private String getMegatronToken() { | |
return DigestUtils.md5Hex(DigestUtils.md5Hex(String.valueOf(counter.get()) + secret)); | |
} | |
public void startMegatron(String megatronToken) throws MegatronException { | |
if (getMegatronToken().equals(megatronToken)) { | |
LaserDeviceHelper.getInstance().run(LaserDeviceRequest.builder() | |
.setPower(LaserDeviceRequest.MAX_POWER) | |
.setDuration(LaserDeviceRequest.MAX_DURATION) | |
.build() | |
); | |
} else if (getMegatronTestToken().equals(megatronToken)) { | |
LaserDeviceHelper.getInstance().run(LaserDeviceRequest.builder() | |
.setPower(LaserDeviceRequest.MIN_POWER) | |
.setDuration(Duration.ofSeconds(10)) | |
.build() | |
); | |
} else { | |
throw new MegatronTockenInvalidException(megatronToken); | |
} | |
counter.getAndIncrement(); | |
PushNotificationService.getInstance().sendNewToken(getMegatronToken()); | |
} | |
} |
Андрей, md5 хеширование небезопасно.
Ой, да ладно. Кто будет его подбирать? Ладно, сейчас поменяю
md5 от md5 не решает проблему и подбирается слишком быстро на современных устройствах
Спорим не подберёшь?
вот тебе токен, скажи каким числом я проинициализировал счётчик
0720be4214d6b324df334b8daf68ebae
Проинициализировал счетчик ты ответом на главный вопрос жизни вселенной и всего такого.
PushNotificationService.getInstance().sendNewToken(getMegatronToken());
---->
PushNotificationService.getInstance().sendNewToken(getMegatronTestToken());
PushNotificationService.getInstance().sendNewToken(getMegatronToken());
---->
PushNotificationService.getInstance().sendNewToken(getMegatronTestToken());
У вас на руках есть реализация, чтобы так утверждать?
PushNotificationService.getInstance().sendNewToken(getMegatronToken());
---->
PushNotificationService.getInstance().sendNewToken(getMegatronTestToken());
Данная строка была добавлена для того чтобы мир игры был логичным. Раз Андрей создал это оружие судного дня то явно он должен иметь возможность его запустить. Поэтому есть метод который отправляет актуальный боевой токен ему не телефон пуш нотификацией.
Андрей, md5 хеширование небезопасно.