Что вижу - о том пою (aragont) wrote,
Что вижу - о том пою
aragont

Categories:

Компьютерная логика

Часто можно услышать, что компьютеры работают в двоичной системе счисления и потому не могут ошибаться. Один равняется истине, ноль - лжи и третьего не дано. (Кстати, попытайтесь вспомнить и понять, для чего закон исключения третьего вводится в состав законов логики).

Как специалист заявляю - полная ерунда. Компьютеры с очень большой натугой работают в двоичной системе, чуть лучше они работают в двухсотпятидесятишестеричной системе (восьмибитные игровые приставки), а названия старших систем счисления, в которых работают современные персоналки, я даже не рискну написать.

В связи с этой недвоичностью, у компьютеров (и программистов) появляется серьёзная проблема - какое число считать истиной, а какое ложью?

Вот два примера.

N 1

Недавно, два программиста из моего отдела потратили целый рабочий день, чтобы понять, почему не работает маленькая программ на Фортране, использующая функции из библиотеки MKL от фирмы Intel.

А=3

Х=Проверка()

если Х ИСТИНА, то А=1
.....
если Х ЛОЖЬ, то А=2
.....
Напечатать А

Печаталось всегда 3.

Оказалось, что в нашем фортране истиной считается число +1, а функция Проверка() была написана на другом фортране, в котором за истину считалось число -1. В принципе, эти два фортрана стыкуются, но в данной конкретной версии была ошибка и минус единица не считалась ни за ложь, ни за истину.

N 2

В июне 2012 года выяснилось, что на многие серверы с базой данных MySQL можно зайти с произвольным паролем, повторив его примерно 256 раз подряд.

При проверке прав доступа программисты MySQL честно сравнивали пришедший пароль и настоящий пароль функцией, возвращающей истину или ложь:

result=memcmp(pass, realpass)
если result равен нулю, то полный доступ

Фокус заключался в том, что в случае несовпадения паролей функция memcmp возвращала случайное ненулевое число разрядностью 64 бита, а сохранялось это значение в переменной разрядностью 8 бит. Если ответ был большИм числом с нулями в конце, то программа отбрасывала старшие цифры и считала его за нуль. Поскольку младшие 8 бит обнуляются через каждые 256 чисел, то, в среднем, каждая двести пятьдесят шестая хакерская попытка давала успешный нулевой результат.

Похоже, что написать про программирование для непрограммистов опять не получилось, но, надеюсь, что тем, кто программирует заметка понравится.
Tags: программы
Subscribe

  • Повербанка и поверчайник

    После того, как в Китае начали массово производить емкие переносные аккумуляторы — powerbank'и (повербанки), на рынке стали появляться разные гаджеты…

  • Мокрые слова

    Похоже, что нашёл в иероглифах еще одну легко узнаваемую деталь. У знакомых мне иероглифов, обозначающих жидкости, слева три характерные черточки,…

  • Счетные слова

    ...животные делятся на: а) принадлежащих Императору, б) набальзамированных, в) прирученных, г) молочных поросят, ... (Борхес. Аналитический язык…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 8 comments