Текст книги "Магнитные карты и ПК"
Автор книги: Патрик Гёлль
сообщить о нарушении
Текущая страница: 5 (всего у книги 6 страниц)
Например, в случае файла VISA.CAR необходимо произвести проверку только одной части информации, декодирование которой представлено в главе 2, где речь идет о содержимом дорожки ISO 2 банковской карточки. В данном случае это 16-значный номер карточки: 4970101234567890.
Программа LUHNCHK.BAS работает с числами, состоящими из любого количества цифр, как четного, так и нечетного.
10 REM – LUHNCHK.BAS —
20 KEY OFF: CLS
30 CLEAR: PRINT: PRINT «введите номер карты»: INPUT N$
40 L=LEN(N$):DIM N(L)
50 FOR F=1 TO L
60 C$=MID$(N$,F,1): C=VAL(C$): N(F) = C
70 NEXT F
80 IF (L/2) – INT (L/2) = 0 THEN 170
90 T=0: FOR F=2 TO L – 1 STEP 2
100 C=2*N(F): IF C>=10 THEN C=C-9
110 T=T+C: NEXT F
120 FOR F=1 TO L STEP 2
130 T=T+N(F): NEXT F
140 IF T>=10 THEN T=T-10: GOTO 140
150 IF T=0 THEN PRINT «номер действителен»: GOTO 30
160 PRINT «номер не действителен»: GOTO 30
170 T=Q: FOR F=1 TO L-1 STEP 2
180 C=2*N(F): IF C>=10 THEN C=C-9
190 T=T+C: NEXT F
200 FOR F=2 TO L STEP 2
210 T=T+N(F): NEXT F
220 GOTO 140
230 REM (c)1996 Patrick GUEULLE
В данном случае ответ будет номер не действителен, потому что мы, естественно, использовали номер несуществующей кредитной карточки. С другой стороны, ничто не мешает произвести такую проверку с вашей банковской карточкой, номер которой должен быть действительным.
СРАВНЕНИЕ КАРТ
Поскольку магнитная технология допускает практически неограниченные возможности стирания информации (штатного или нештатного), а также многократную запись, то важно иметь возможность проверять, не изменилось ли содержимое той или иной дорожки.
Это очень просто сделать путем архивирования файла .CAR – того, который послужил для кодирования карты (мы еще к этому вернемся), либо того, который был создан при «реперном» считывании.
Программа VERMAG.BAS позволяет сравнить не две карты, а два файла .CAR – старый и новый. Каждый идентичный бит обозначается тире, а каждый отличающийся – звездочкой, что сразу дает представление о масштабе возможного несоответствия. Нули запуска и заполнения, как известно, представляются в сокращенном виде, поскольку они исключены из процесса проверки. Их число может несколько изменяться от одного до другого считывания той же самой карты.
10 REM – VERMAG.BAS —
20 KEY OFF: CLS
30 PRINT «имя файла, подлежащего проверке»;
40 INPUT N$: IF N$ = "" THEN END
50 FOR F=1 TO LEN (N$)
60 IF MID$ (N$,F,1) = "." THEN 90
70 NEXT F
80 N$=N$+".CAR"
90 OPEN N$ FOR INPUT AS #1
100 PRINT: PRINT «имя эталонного файла»;
110 INPUT N$: IF N$="" THEN END
120 FOR F=1 TO LEN(N$)
130 IF MID$ (N$,F,1)="." THEN 160
140 NEXT F
150 N$=N$+".CAR"
160 OPEN N$ FOR INPUT AS #2
170 CLS: PRINT «идет проверка…»
180 DIM A(LOF(1)): DIM B(LOF<2))
190 F=0: WHILE NOT EOF(1)
200 INPUT#1, A (F); F=F+1: WEND
210 M=F
220 F=0: WHILE NOT EOF(2)
230 INPUT#2,B(F): F=F+1: WEND
240 N=F
250 X=0
260 IF A(X) =1 THEN 280
270 X=X+1: GOTO 260
280 Y=0
290 IF В (Y) = 1 THEN 310
300 Y = Y+1: GOTO 290
310 CLS: PRINT «0…….0»;: E=0
320 IF A(X) =B(Y) THEN PRINT "-"; ELSE PRINT "*";: E=1
330 IF X=M THEN 360 ELSE X=X+1
340 IF Y=N THEN 360 ELSE Y=Y+1
350 GOTO 320
360 PRINT" 0 0": PRINT: PRINT: PRINT «Файл»
370 IF E=0 THEN PRINT «соответствует!»: PRINT: PRINT: END
380 PRINT «не соответствует!»: PRINT: PRINT: BEEP: END
390 REM COPYRIGHT (c)1996 Patrick GUEULLE
Ниже представлен результат, полученный при сравнении явно различных файлов TEST5.CAR И TEST7.CAR.
Теперь покажем результат, полученный при сравнении двух идентичных файлов. В обоих случаях отчет обязательно появляется по окончании выполнения программы.
4. Копирование, кодирование, стирание
В этой главе мы затронем тему, которую некоторые считают запретной. Общеизвестно, что магнитные карты по своей природе – носители информации с совершенно свободным доступом для считывания и записи. Предполагается, что устройства кодирования не должны оказаться в руках любого желающего, но, несмотря на это, мы собираемся рассказать, как построить их наипростейшим способом.
Естественно, мы позволили себе заняться этой темой только после того, как убедились, что подобное действие не потребует доступа к конфиденциальной информации или использования компонентов, запрещенных к продаже или хранению.
В конце концов, мы уже поступали так несколько лет назад, когда взялись обучить наших читателей считывать и записывать информацию на чип-карты.
С другой стороны, мы решительно не можем согласиться, что так называемые важные приложения настолько уязвимы, что любой дилетант способен взломать их с помощью простой магнитофонной головки, подключенной к ПК. Если бы это было так, все секреты уже давно стали бы общим достоянием.
ДОЛЖЕН ЛИ КОДЕР БЫТЬ ОБЯЗАТЕЛЬНО АВТОМАТИЗИРОВАННЫМ?
Хотя это мнение широко распространено (и не без оснований), ответ на него отрицательный. В самом деле, на рынке встречаются считывающие и записывающие устройства (кодеры), работающие при проведении карты вручную. При этом в них используются некоторые технические хитрости, которыми не запрещено воспользоваться и нам.
Автоматизированная версия, бесспорно, имеет то преимущество, что обеспечивает постоянную и точную скорость прохождения карты перед записывающей головкой. Однако можно получить сравнимый результат и при помощи простого датчика, способного постоянно улавливать точное положение карты.
Если только в кодирующих схемах будет использован весь этот опыт, то запись, осуществленная вручную, окажется так же стабильна, как и в автоматизированном варианте. Рискуя вызвать гнев специалистов, мы все-таки зададимся вопросом: «А так ли уж необходимо стабильное кодирование?»
И снова ответом будет категорическое «нет» – по крайней мере, для наиболее распространенного случая, когда карта предназначена для считывания в ручном считывающем устройстве.
Ручные считывающие устройства, начиная с описанных в главе 3, настолько «терпимы» к скорости прохождения карт и ее изменениям, что без проблем воспринимают карты, стабильность параметров кодирования которых катастрофична.
Как ни странно, это распространяется и на значительное число автоматизированных считывающих устройств просто потому, что они часто построены на тех же самых схемах декодирования, что и ручные! Как говорится, кто может больше, тот может и меньше; кстати, такой метод работы повышает надежность и экономит средства. Так зачем от него отказываться?
Единственное настоящее неудобство такого подхода заключается в невозможности автоматического отсеивания подозрительных карт или, наоборот, появляется возможность отсеивания и некоторого числа вполне нормальных карт со всем вытекающим отсюда недовольством пользователей.
В качестве резюме можно сказать, что применение для кодирования той же самой простейшей механики, что и для считывания, допустимо только в теории, но никак не на практике.
ТРАНСФОРМАЦИЯ СЧИТЫВАЮЩЕГО УСТРОЙСТВА В КОДЕР
Несмотря на все вышесказанное, не стоит и мечтать напрямую использовать для кодирования устройство, которое уже послужило нам для считывания.
Этого не следует делать по той простой причине, что для считывания мы применяли головку от кассетного магнитофона, воздушный зазор которой едва покрывает половину ширины дорожки.
Без сомнения, удобно иметь одновременно головки для считывания и для записи. Поэтому лучше остановиться на решении, состоящем в добавлении записывающей головки к уже существующему считывающему устройству.
Учитывая ограничения, налагаемые шириной дорожки, речь может идти практически только о головке записи-считывания от катушечного монофонического двухдорожечного магнитофона.
Мы проводили весьма успешные эксперименты с помощью допустимо изношенной головки, снятой со старого магнитофона Sony (сопротивление приблизительно 400 Ом), а также другой настолько старой головки, что нам не удалось выяснить ее происхождение (сопротивление 2700 Ом).
Адаптация к существующему считывающему устройству состоит в том, чтобы установить записывающую головку точно напротив считывающей.
Если вам повезло и у вас есть промышленное считывающее устройство с двумя головками, считывающее карты вне зависимости от направления их вставления, то для установки записывающей головки вместо одной из считывающих достаточно изготовить несложную адаптирующую подставку.
Если вы предпочли построить самодельное считывающее устройство по чертежам, приведенным в данной книге (рис. 3.13), то для его доработки достаточно вырезать окошко в пластине, противоположной считывающей головке (деталь В) и зафиксировать на ней записывающую головку с помощью маленьких алюминиевых уголков.
Как это выполнить, показано на рис. 4.1–4.3.
Рис. 4.1. Вариант установки записывающей головки на промышленном считывающем устройстве
Рис. 4.2. Установка записывающей головки на самодельном считывающем устройстве
Рис. 4.3. Самодельное устройство записи-считывания (вид сверху)
Отметим, что для обоих случаев не требуется пружинящий головкодержатель, поскольку карта может прижиматься к записывающей головке за счет головки считывания. Необходимо только, чтобы записывающая головка немного (приблизительно на 2 мм) выступала в окошко за внутреннюю поверхность крепежной пластины.
Конечно, необходимо предусмотреть средства регулировки как для центрирования головки напротив дорожки, так и для обеспечения надежного контакта с картой.
Как правило, для этого достаточно, чтобы диаметры отверстий с запасом превышали диаметры крепежных винтов; можно также использовать несколько шайбочек.
УНИВЕРСАЛЬНЫЙ УСИЛИТЕЛЬ ЗАПИСИ
Запись информации на карту с изменением направления магнитного потока предполагает, что ток должен протекать через обмотку головки в двух направлениях. Запись должна осуществляться до насыщения, величина тока будет существенно больше, чем при аудиозаписи.
При необходимости закодировать карты с высокоэнергетическими магнитными полосками, то есть с высокой коэрцитивностью (HiCo ~= 2750 Э), потребуется еще больший ток – до нескольких десятков миллиампер.
Все это, конечно, осуществимо при условии, что магнитный сердечник головки в состоянии выдержать такое возбуждение, не входя в режим насыщения. При отсутствии подробных характеристик каждой используемой головки единственный способ убедиться в вышесказанном – проведение реальных экспериментов.
С другой стороны, совершенно бесполезно пытаться закодировать карты HiCo с коэрцитивной силой 4000 Э при помощи простых магнитофонных головок, именно этим и обеспечивается безопасность таких карт.
С учетом вышесказанного мы и исследовали схему, представленную на рис. 4.4, в которой предпринято множество предосторожностей, учитывающих все возможные ситуации.
Рис. 4.4. Схема усилителя записи
В ней мы используем очень распространенную и недорогую интегральную схему. TDА2030, обычно предназначенную для создания аудиоусилителей с выходной мощностью до 14 Вт и током до 3,5 А.
С помощью этой ИС можно проводить эксперименты и с весьма специфическими головками, имеющими очень низкие сопротивления.
Для работы ИС требуется двухполярное напряжение питания ±12 В, а иногда – при необходимости – и ±18 В. В отдельных случаях достаточно иметь две батарейки по 9 В.
Поскольку ИС TDA2030 обладает большим коэффициентом усиления, то с разомкнутым контуром отрицательной обратной связи она может работать в качестве компаратора. Порог переключения схемы фиксируется с помощью простого диода и составляет приблизительно 0,7 В, что более чем вдвое меньше нижнего уровня выходного напряжения логической 1 параллельного порта ПК. Ниже мы рассмотрим ситуацию подачи на этот усилитель сигнала с линии интерфейса Centronics компьютера. Пока же усилитель может управляться с помощью импульсов самого разного происхождения.
Во всяком случае, следует запомнить, что предельным входным TTL-уровням (0 и +5 В) на выходе будут соответствовать уровни, составляющие приблизительно +9 и -18 В. Несмотря на то что к выходу ИС можно напрямую подключать головку сопротивлением 250–500 Ом, следует ограничить ток с помощью резистора, соединенного с ней последовательно. Наши исследования показали, что если ограничиться кодированием карт с низкоэнергетическими магнитными полосками (LoCo), то величина сопротивления должна быть не менее 18 кОм. На практике мы рекомендуем величину, близкую к 2 кОм, хотя, повторяю, вполне допустимо и прямое подключение головки к усилителю, а для кодирования карт HiCo оно даже необходимо.
Чертеж печатной платы усилителя записи представлен на рис. 4.5. Размеры платы, что уже стало привычным, должны позволять разместить ее в непосредственной близости от записывающей головки.
Рис. 4.5. Топология платы усилителя записи
Стоит отметить, что достаточно большие величины токов при крутых фронтах сигналов в случае слишком длинных соединительных проводов головки могут вызвать излучения, способные отрицательно воздействовать на соседние схемы считывания.
Размещение элементов на плате выполняется в соответствии со схемой, представленной на рис. 4.6. Размещение не вызовет никаких проблем, поскольку ИС TDA2030 не требуется радиатор.
Рис. 4.6. Размещение элементов усилителя записи
ИС TDA2030 работает в режиме переключения в диапазоне, далеком от предельных величин, и, кроме того, содержит внутреннюю защиту, весьма полезную при возникновении случайных коротких замыканий.
Для удобства можно использовать клеммные соединители, облегчающие подключение к модулю. На рис. 4.7 дан общий вид усилителя записи, а перечень его элементов приведен в табл. 4.1.
Рис. 4.7. Общий вид усилителя записи
Таблица 4.1. Перечень элементов усилителя записи
УСТРОЙСТВО ДЛЯ КОПИРОВАНИЯ КАРТ
Хотя простое копирование одного магнитного носителя на другой без внесения каких-либо изменений в закодированные данные не представляет большого практического интереса, часто именно таким образом можно научиться работать с магнитными картами или билетами.
Почти четверть века ходят слухи, что совсем нетрудно дублировать билеты на метро с помощью обыкновенного утюга, и, правда, эта идея не настолько экстравагантна.
Действительно, известно, что нагрев благоприятствует переносу намагниченности, и это теоретически позволяет скопировать закодированную дорожку на пустую, накладывая их одну на другую и нагревая утюгом. Желательно, чтобы при такой операции не был поврежден оригинал (предпочтительно HiCo).
В сочетании с усилителем считывания, представленном на рис. 3.15, наш усилитель позволяет применить более надежный способ.
Достоинство метода копирования заключается в том, что для него не требуется микрокомпьютер, однако необходимо четко уяснить, что несравнимо предпочтительнее такая последовательность, когда происходит считывание в файл, а последующая запись осуществляется из файла на новую карту.
Если довольствоваться представленным вариантом (рис. 4.8), предполагающим подключение выхода усилителя считывания напрямую к входу усилителя записи (в этом случае цепи «земли» обоих модулей объединяются), то любое изменение направления магнитного потока, захваченное считывающей головкой, будет точно воспроизведено записывающей головкой.
Рис. 4.8. Простой метод копирования магнитных карт
Причем чтобы скопировать одну дорожку на другую, достаточно синхронно провести обе карты: одну карту перед считывающей головкой, а другую – перед записывающей.
Это можно сделать, если выровнять в соответствии со схемой, приведенной на рис. 4.8, считывающее устройство и кодер на плоском и прочном основании и соединить обе карты при помощи, например, простой линейки с клейкой лентой.
КОДЕР ДЛЯ ПК
Поскольку нельзя сравнивать экспериментальные устройства, к которым относится и наше, с промышленными кодирующими устройствами для магнитных карт, мы намеренно предпочли простоту совершенству.
По собственному опыту знаю, что нетрудно быстро приобрести навык, позволяющий перемещать карту с практически постоянной скоростью. Это позволяет утверждать, что для исследований и простейших применений вполне достаточно простого кодера с ручным перемещением карты.
Действительно, за несколько секунд можно перечитать карту, которую только что закодировали, при необходимости изучить ее с помощью «магнитного разоблачителя», а затем перекодировать, если что-то не так.
Наше новое устройство способно с помощью компьютера производить запись магнитных карт со скоростью 500 бит/с. При этом мы предполагаем, что карта проходит перед записывающей головкой со скоростью 17 см/с, а плотность кодирования составляет 75 bpi (дорожка ISO 2).
Научиться перемещать карты с указанной скоростью даже при минимальной тренировке несложно. Тонкий момент заключается в необходимости очень точно синхронизировать начало записи с началом дорожки. Нам удалось решить эту проблему, используя считывающую головку, расположенную напротив записывающей.
Принцип синхронизации состоит в том, что через устройство перемещается не одна карта, а две, сложенные «рубашка к рубашке». Одну из них назовем кодируемой, а вторую, более тонкую, – картой синхронизации.
Закодированная любыми данными на всю длину дорожки, карта синхронизации после первого же контакта с головкой заставит считывающую схему выдать тактовый импульс. Для того чтобы ПК мог начать запись, большего и не требуется.
СОЗДАНИЕ КАРТЫ СИНХРОНИЗАЦИИ
Самый простой способ получить необходимую карту синхронизации состоит в том, чтобы ножницами вырезать карту стандартной формы из билета на поезд дальнего следования французских железных дорог.
Рис. 4.9. Получение корты синхронизации с помощью железнодорожного билета
Одна из четырех закодированных дорожек с плотностью записи 210 bpi точно совпадет со считывающей головкой. Она и обеспечит синхронизацию, если половинки нашего «сэндвича» будут правильно сложены и проведены через устройство в нужном направлении.
Другой способ состоит в кодировании тонкой карты или использованного проездного билета. Для этого можно использовать и самодельную карту, полученную из визитной карточки, приклеив ее к обратной стороне магнитной ленты.
При изготовлении карты синхронизации управлять кодером можно с помощью программы MAKESYNC.PAS, при создании которой для получения требуемой скорости управления записывающей головкой был использован Turbo Pascal.
Если возникли непреодолимые трудности с изготовлением карты синхронизации, процесс записи запускается при помощи простого генератора импульсов, выдающего сигнал TTL-уровней с частотой 500-1000 Гц.
program makesync;
uses crt;
var a: integer;
begin
clrscr;
writeln («Вставить карту в считывающее устройство»);
writeln («и перемещать до появления звукового сигнала»);
for а:=0 to 10000 do
begin,
port[634]:=255;
delay(1);
port(634):=0;
delay(1);
end;
sound(880); delay(500); nosound;
end.
(* COPYRIGHT 1996 Patrick GUEULLE *)
Исходному тексту MAKESYNC.PAS соответствует исполняемый файл MAKESYNC.EXE, который можно запускать из командной строки DOS.
Следует обратить внимание, что эта программа была специально написана для подключения кодера к параллельному порту LPT2. Ее надо заменить программой MAKESYNC 1, если возникнет необходимость использовать порт LPT1.
Если необходимо использовать порт LPT1, то предварительно отключается принтер и вместо исполняемого файла MAGWRITE.EXE берется MAGWRITE1.EXE.
Эта программа предназначена строго для кодирования дорожки ISO 2 стандартных карт, следовательно, записывает она с плотностью 75 bpi. Кодирование с плотностью 210 bpi хотя и возможно, но значительно сложнее, а потому рассматриваться не будет.
При желании читатели могут разработать собственные способы кодирования с плотностью 210 bpi. Однако они не могут обвинить нас в том, что мы не преподнесли на блюдечке методы производства, скажем, хорошо имитированных кредитных карт.
Программа ждет данные, предназначенные для кодирования, в форме файла .CAR, который теоретически мог быть считан с некоторой карты для копирования.
На практике намного интересней кодировать произвольно выбранные данные карты, что сразу порождает проблему создания соответствующего файла .CAR.
ПРОГРАММА ДЛЯ КОДИРОВАНИЯ ДОРОЖКИ ISO 2
Программа CREMAG.BAS выполняет функцию, прямо противоположную функции программы DEC5.BAS в том смысле, что она трансформирует цифровые данные в файл .CAR, готовый к записи и включающий нули запуска и заполнения.
10 REM – CREMAG.BAS —
20 KEY OFF: CLS
30 PRINT «Ввести данные, предназначенные для записи,»
40 PRINT «затем нажать ENTER»
50 А$=""
60 INPUT В$
70 IF В$ = "" THEN 100
80 А$=А$+В$
90 GOTO 60
100 C$="0000000000"
110 FOR F=1 ТО LEN(A$)
120 IF MID$(A$,F,1)="0" THEN C$=C$+"00001": GOTO 240
130 IF MID$(A$,F,1)="1" THEN C$=C$+"10000": GOTO 240
140 IF MID$(A$,F,1)="2" THEN C$=C$+"01000": GOTO 240
150 IF MID$(A$,F,1)="3" THEN C$=C$+"11001": GOTO 240
160 IF MID$(A$,F,1)="4" THEN C$=C$+"00100": GOTO 240
170 IF MID$(A$,F,1)="5" THEN C$*C$+"10101": GOTO 240
180 IF MID$(A$,F,1)="6" THEN C$=C$+"01101": GOTO 240
190 IF MID$(A$,F,1)="7" THEN C$=C$+"11100": GOTO 240
200 IF MID$(A$,F,1)="8" THEN C$=C$+"00010": GOTO 240
210 IF MID$(A$,F,1)="9" THEN C$=C$+"10011": GOTO 240
220 IF MID$(A$,F,1)=" {" THEN 370
230 PRINT: PRINT «Данные не действительны (запрещенные СИМВОЛЫ)»: ВЕЕР: END
240 NEXT F
250 IF LEN(C$)<=210 THEN 270
260 PRINT: PRINT «Данные слишком длинные (максимум 40 цифровых символов)»: END
270 C$="0"+С$
280 IF LEN (C$) =240 THEN 320
290 C$=C$+"0"
300 IF LEN(C$)=240 THEN 320
310 GOTO 270
320 OPEN «carte.car» FOR OUTPUT AS #1
330 FOR F=1 TO LEN(C$)
340 PRINT#1,MID$(C$,F,1)+CHR$(32);
350 NEXT F
360 CLS: PRINT: PRINT «Файл CARTE.CAR готов»: BEEP: END
500 IF MID$(A$,F,1)<>T THEN 230
510 GOTO 240
520 REM (c)1996 Patrick GUEULLE
Как и программа MAGWRITE, CREMAG предназначена для кодирования дорожки ISO 2 и, следовательно, будет обрабатывать только цифровые данные. Разделительные символы воспринимаются именно в том виде, в каком их отображает DEC5, то есть в фигурных скобках (а не в простых круглых скобках или кавычках).
Так, флажок старта будет записан как {start}, флажок конца как {end}, разделитель полей как {sep}.
Перейти на новую строку можно путем однократного нажатия на клавишу ENTER. Создание файла .CAR инициируется двукратным нажатием этой клавиши.
Количество кодируемых данных значения не имеет, если не превышается максимум, отведенный дорожке ISO 2. Нули заполнения автоматически записываются в начале и конце дорожки, чтобы отцентровать блок информационных битов.
ПРОГРАММА РАСЧЕТА КОНТРОЛЬНЫХ КЛЮЧЕЙ
При необходимости записать на карте последовательности цифр, то есть некие числовые данные, которые могут оказаться номерами банковских счетов (не исключено), возникает проблема обеспечения безопасности. Как мы уже знаем, эту проблему можно решить путем добавления контрольного ключа, рассчитываемого по стандартному алгоритму, которого придерживаются практически все производители карт.
Программа LUHN.BAS способна рассчитать эту дополнительную цифру вне зависимости от количества цифр (четного или нечетного) номера, который требуется защитить.
10 REM – LUHN.BAS —
20 KEY OFF: CLS
30 CLEAR: PRINT: PRINT «Введите цифровые данные, которые требуют обеспечения безопасности»: INPUT N$
40 L=LEN(N$): DIM N(L+1)
50 FOR F=1 TO L
60 C$=MID$(N$,F,1): C=VAL(C$): N(F)=C
70 NEXT F
80 IF (L/2) – INT(L/2) =0 THEN 200
90 T=0: FOR F=1 TO L STEP 2
100 C=2*N(F): IF C>=10 THEN C=C-9
110 T=T+C: NEXT F
120 FOR F=2 TO L-1 STEP 2
130 T=T+N(F): NEXT F
140 IF T>=10 THEN T=T-10: GOTO 140
150 N=10-T: IF N=10 THEN N=0
160 N(L+1)=N
170 CLS: FOR F=1 TO L+1
180 PRINT N(F);: NEXT F
190 PRINT: GOTO 30
200 T=0: FOR F=2 TO L STEP 2
210 C=2*N(F): IF C>=10 THEN C=C-9
220 T=T+C: NEXT F
230 FOR F=1 TO L-1 STEP 2
240 T=T+N(F):NEXT F
250 IF T>=10 THEN T=T-10: GOTO 250
260 N=10-T: IF N=10 THEN N=0
270 GOTO 160
280 REM (c)1996 Patrick GUEULLE
Определенный таким образом ключ добавляется в конце защищаемого номера. Полученная при этом последовательность цифр успешно проходит проверку, производимую программой LUHNCHK (см. главу 3).
Это дает читателям возможность проверить (при повторном считывании) целостность данных, которые они закодировали на своих картах.
ПРОГРАММА РАСЧЕТА LRC
Символ LRC в принципе должен кодироваться после флажка end каждой дорожки вслед за проверкой нечетности и расчетом контрольного ключа с целью обеспечения последнего уровня безопасности.
Программа LRCMAG.BAS, как и CREMAG, ждет введения с помощью клавиатуры всех данных, начиная с флажка start и до флажка end включительно.
10 REM – LRCMAG. BAS —
20 KEY OFF: CLS
30 PRINT «Введите данные для кодирования»
40 PRINT «затем нажать ENTER»
50 А$=""
60 INPUT В$
70 IF В$ = "" THEN 100
80 А$=А$+В$
90 GOTO 60
100 C$=""
110 FOR F=1 TO LEN(A$)
120 IF MID$(A$,F,1)="{" THEN 300
130 V=VAL(MID$(A$,F,1))
140 C$=C$+CHR$ (V)
150 NEXT F
160 L=0
170 FOR F=1 TO LEN(C$)
180 L=L XOR ASC(MID$(C$,F, 1))
190 NEXT F
200 PRINT «LRC =»
210 IF L=11 THEN PRINT «{start}»: GOTO 280
220 IF L=13 THEN PRINT «{sep)»: GOTO 280
230 IF L=15 THEN PRINT «{end}»: GOTO 280
240 IF L=10 THEN PRINT «{10}»: GOTO 280
250 IF L=12 THEN PRINT «{12}»: GOTO 280
260 IF L=14 THEN PRINT «{14}»: GOTO 280
270 PRINT L
280 END
300 F=F+1
310 IP MID$(A$,F,1) = "1" THEN 340
320 IF MID$(A$,F,1) = "s" THEN 390
330 IF MID$(A$,F,1)="e" THEN C$=C$+CHR$ (15): F=F+3: GOTO 430
340 F=F+1
350 IF MID$(A$,F, 1) = "0" THEN C$=C$+CHR$(10): F=F+1: GOTO 430
360 IF MID$(A$,F,1) = "2" THEN C$=C$+CHR$(12): F=F+1: GOTO 430
370 IF MID$(A$,F,1) = "4" THEN C$=C$+CHR$(14): F=F+1: GOTO 430
380 GOTO 130
390 F=F+1
400 IF HID$(A$,F,1) = "t" THEN C$=C$+CHR$ (11): F=F+4: GOTO 430
410 IF MID$ (A$,F, 1) ="e" THEN C$=C$+CHR$ (13): F=F+2: GOTO 430
420 CLS: PRINT «Ошибка!»: BEEP: END
430 IF MID$(A$,F, 1)<>")" THEN 420
440 GOTO 150
450 REM (c)1996 Patrick GUEULLE
После двойного нажатия на клавишу ENTER программа выдает символ, который надо вставить за флажком end во время ввода данных в программе кодирования CREMAG.
СТИРАНИЕ МАГНИТНЫХ КАРТ
Как и все магнитные носители, карты могут стираться практически неограниченное число раз. Самый простой способ стереть карту – произвести новую запись, которая затрет предыдущие данные.
Однако общее стирание рекомендуется делать в любом случае, поскольку из-за несоответствия стандартам, например минимального несоответствия высоты воздушного зазора или небольшого смещения положения записывающей головки, существует опасность того, что часть старых данных не перекроется новыми.
При этом возможна ситуация, когда карта будет нормально считываться на одних считывающих устройствах и неправильно – на других. Может также возникнуть необходимость убрать некоторые данные, относящиеся к разряду конфиденциальных, например расположенных на дорожках ISO 1 и ISO 3, карты, которая используется повторно и запись на которую будет вестись только на дорожке ISO 2.
Наиболее надежно стирается вся информация с дорожек карты при помощи простого постоянного магнита. По крайней мере, это относится к картам с низкой коэрцитивностью (LoCo). Только очень мощные магниты (например, от громкоговорителей) могут претендовать на эффективное стирание дорожек HiCo на 2750 Э и тем более на 4000 Э.
Оптимальный порядок действий состоит в том, чтобы положить карту на стальной лист (автор данной книги воспользовался корпусом блока питания для кодера) и к нему через карту приставить мощный магнит.
Необходимо один или несколько раз провести магнитом вдоль всей магнитной полосы, но так, чтобы он проходил по всем дорожкам. Если вы боитесь, что магнит может поцарапать карту, то из предосторожности на нее следует положить лист бумаги.
Естественно, проверка с помощью «магнитного разоблачителя» позволит лучше, чем попытка повторного считывания, убедиться в эффективности проведенной операции. Для более специфических случаев, скажем стирания единственной дорожки, можно построить стирающее устройство, которое будет очень похоже на кодер: головка будет питаться постоянным током, полярность которого значения не имеет. В случае головок с сопротивлением 300–500 Ом прямое подключение к напряжению 5-12 В будет достаточным.