Как я могу скрыть свою подпись в программе? [закрыто]

31

У нас есть курс по университетскому программированию, и наши студенты задают несколько вопросов по программированию в нашей группе на Facebook. Я немного не решаюсь поделиться всеми своими программами, особенно если это что-то классное для одного из заданий, поскольку на них смотрят ТП, и они могут заметить, если у кого-то есть такая же программа, и начать задавать вопросы о том, откуда она пришла от. Тем не менее, иногда я хотел бы поделиться своим кодом, чтобы помочь другим, но я не хочу, чтобы люди просто брали мою работу. (Пояснение: нам разрешено сотрудничать с заданиями) Это, конечно, тонкая линия. Хотя я хочу помочь некоторым людям, я обеспокоен тем, что у них может не быть академической честности, чтобы переписать код самостоятельно.

Большинство моих сокурсников не очень продвинуты в своих навыках, так что я бы с легкостью скрыл свое имя в кодированной строке Base-64, созданной в отдельном месте. Тем не менее, это может быть слишком очевидно для случайной строки, чтобы сидеть без дела.

Какие существуют варианты, чтобы скрыть мое имя в программе, чтобы оно не выглядело подозрительным?

Я видел в CodeGolf, что они заставили искусство ascii превратиться в другие вещи при оценке. Есть ли похожие стратегии, которые я мог бы использовать? Идеальным решением было бы то, что выглядит как то, что подходит незаметно, но в действительности имеет функцию доказать, что я закодировал это с самого начала.

Пояснение: (Извините, я должен был сказать это раньше) Нам разрешено сотрудничать, но мы должны объяснить наши программы ТП, чтобы получить очки. Просто для удовольствия можно спрятать некоторые пасхальные яйца в чужом коде, если они просочатся, тем более что может возникнуть соблазн обменяться программами, чтобы проверить, что ответы на проблемы, которые они генерируют, эквивалентны и т. Д., Или посмотреть, как другие решают проблему.

MikeFoxtrot
источник
70
не делись кодом, а делись идеями
чокнутый урод
7
Несколько лет назад у меня была переменная с определенным именем (в моем случае: «pkmn»), которую я использовал в каждом написанном мной коде, для вещей, которые не заметны (то, что вы обычно называете «i», « J»...). Когда кто-то украл мой код, он не прошел весь код и оставил переменную нетронутой. Это была моя подпись.
DrakaSAN
29
Почему ты спрашиваешь нас? Спросите своего профессора или ТА, какое у вас соответствующее поведение .
Эрик Липперт
6
Это приложение стеганографии . Обычно реальные приложения включают в себя сокрытие сообщений в звуке, изображениях или других форматах с потерями, но здесь применим общий случай. Принятый ответ хороший, но я бы порекомендовал узнать и о стеганографии.
2
Как насчет просто опубликовать слегка испорченный код?
Бенджол

Ответы:

44

Используйте свою подпись не в своем коде, а в общедоступном журнале разработки.

Опубликуйте свой код в общедоступном репозитории Github. Включите Docblock со своим именем в поле «Автор». Таким образом, есть публичная запись о том, что вы являетесь настоящим автором программы.


Это может не квалифицироваться как «скрытие», но, по моему мнению, это так. Если учащийся решит скопировать ваш код, он подумает, что ему нужно только обменять свою подпись на вашу. Представьте их удивление, когда вы представите общественности доказательства их правонарушений. Что еще хуже для них, это доступно онлайн. Вы даже можете использовать онлайн-инструмент, такой как Diffchecker , чтобы продемонстрировать, какие части вашего кода были украдены!

РЕДАКТИРОВАТЬ: Как указано в комментариях, убедитесь, что ваша школа позволяет делиться своей работой таким образом! ОП указал, что с этим учреждением все в порядке, а у вас нет!

sbichenko
источник
26
@exizt - Хотя это хорошая идея после школьной среды. Я сомневаюсь, что большинство формальных ситуаций в школьной среде примут это, потому что в конце концов вы все еще делитесь своей работой с другими учениками. Лучше оставить свою школу работать самостоятельно (и только в одиночку), пока вы не получите оценку за нее.
Ramhound
4
@exizt - Профессора беспокоятся об обмане. Если профессор не говорит, что вы можете работать с другим студентом, у них обычно есть ожидание, что вы не будете скрывать код от своих сверстников. Если вам нужна программа, ожидается, что вы пойдете в ТП и / или к профессору, а не к своим сверстникам. По этой причине я предложил оставить вашу работу при себе, пока вы не получите оценку. В то время как все это тепло и нечетко, автор хочет помочь своим сверстникам, но это не его проблема, они не могут сделать работу без посторонней помощи. Он может помочь, просто не имея доказательств такого поступка, если он хочет сидеть там и что-то объяснять
Ramhound
4
Как это решило бы оригинального автора? Человек, крадущий ваш код, может просто заявить, что он написал его перед вашей регистрацией на github, и что вы украли его у них. Я не вижу решения проблемы в этом вопросе.
Адам Дэвис
7
Проучившись в моем университете, я точно знаю (и, следя за этим), что после этого ответа вас обвинят в академических проступках. Мне неизвестна какая-либо университетская политика в моей стране (Австралия), в которой проводится различие между копирайтером и копиартом в отношении плагиата, и я сомневаюсь, что где-то еще она будет существенно отличаться. Намного безопаснее хранить свой код при себе!
Сапи
2
Git позволяет коммиту устанавливать любые временные метки, которые он хочет. Поэтому я сомневаюсь, что вы можете положиться на git-репо для каких-либо доказательств.
Зан Рысь
14

«поскольку на них смотрят ТП, и они могут заметить, есть ли у кого-то такая же программа»,

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

Очень просто: не отдавай свою работу другим. Помогите им написать свои собственные, если хотите, дайте им идеи о том, как решать проблемы, а затем позвольте им делать свое собственное кодирование.

jwenting
источник
Бинго. Первое правило обучения заключается в том, что вы должны помогать людям самостоятельно находить решения. Если вы не хотите, чтобы люди крали ваш код, не давайте им код. Если вы хотите им помочь, опубликуйте подсказки, списки полезных алгоритмов и структуры данных или высокоуровневые описания решения.
Шон МакSomething
2
Многое можно извлечь из сотрудничества на уровне кода. 1) Практикуйтесь в объяснении кода другим 2) Построение рабочих отношений 3) Изучение талантов одноклассников 4) Обучение у одноклассников, когда у вас нет лучшего решения. Группы, объединяющие усилия, превзойдут звезд на островах. Одноклассники всегда будут врагами; ОП пытается получить максимальную отдачу от стороны друга, одновременно смягчая против случайности противника.
duozmo
В @duozmo нет ничего плохого в совместной работе (если назначение, конечно, позволяет), если вы не выполняете за них чужую работу. И нет, мои сокурсники никогда не были врагами, когда я учился в университете. В худшем случае они были конкурентами для самых хороших заданий.
14:00
7

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

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

CraigChilds94
источник
7

Вы также можете использовать один из самых старых приемов в сокрытии сообщений. Сделать первую букву каждой переменной, чтобы скрыть сообщение. Например,

$Image = "test";
$a = "/test/img.jpg";
$message = "This is img.jpg";
$Full = 435674;
$rate = 3;
$ascii = "---....!--";
$number = 2040;
$k = 5;

// Do some work here?
Франциско Презенсия
источник
6
Я бы не зависел от чего-то подобного - если бы они использовали его код, изменение имен переменных и порядка было бы очевидным шагом, чтобы избежать ловли при копировании.
thegrinner
6

Я думаю, что с GitHub или аналогичным решением все в порядке, НО нужно учитывать две вещи:

  • Это по-прежнему дает вашу работу другим, которые должны выполнять ее самостоятельно, так что это может быть наказуемо, независимо от того, прячет ли в ней какое-то пасхальное яйцо или нет.
  • Политика школы на самом деле может быть довольно ограничительной для таких вещей. В Германии, например, есть ряд университетов, которые даже заставляют своих студентов подписывать своего рода «контракт», в котором говорится, что все, что они разрабатывают как часть задания, данного в этом курсе, и этот курс является собственностью университета. и не может распространяться в какой-либо форме без явного разрешения учреждения. Поэтому, прежде чем публиковать школьные материалы в Интернете, я настоятельно советую вам спросить (обычно есть люди, которые работают над этими вещами в каждом учебном и научном учреждении), потому что у вас могут возникнуть проблемы, и я имею в виду не просто получить F, но гораздо хуже. Если вы действительно хотите помочь своим друзьям,
rbaleksandar
источник
Это все очень хорошие моменты! Я не учел их вообще в своем ответе.
сбиченко
спасибо за беспокойство, хорошие моменты :) нам разрешают сотрудничать с другими в выполнении задач, но я не хочу, чтобы люди копировали мой код для их назначения, если я поделюсь некоторыми из них.
MikeFoxtrot
4

У картографов такая же проблема . Пара техник:

  1. Представьте невероятное отклонение от традиционного стиля вашего языка, например, всегда имейте несбалансированное пространство вокруг операторов

    if (lefthand== righthand)

  2. Распространяйте запреты по всему коду, если они являются частью языка, который вы используете.

    lefthand = righthand;;

duozmo
источник
(1) развалится, если ученики используют что-то вроде автоформатера Eclipse. (2) с NOPs это хорошо.
Ричард Ле Мезурье
Как бы вы доказали, что люди копируют вас, а не наоборот?
Пьер Арло
2
@ArlaudPierre как один человек ранее сказал, что уловка - слишком использовать что-то подобное для всех программ с начала года, чтобы вы могли доказать, что вы сделали это намеренно, а другой - нет.
MikeFoxtrot
Первый - бледный, и, как было указано, он легко побежден средством форматирования; вторая выдаст предупреждения в любой хорошей IDE.
Дэвид Конрад
3

Предотвращение плагиата НЕ в вашей работе в качестве студента, это исключительно в руках инструктора / TA.

Вообще говоря, относитесь к школе, как к закрытому бизнесу. Ваши сокурсники являются коллегами для других работодателей. Вы не можете делиться кодом, кроме простых однострочников и тому подобного, и НИКОГДА не делитесь целыми классами или проектами.

Сокрытие «пасхальных яиц» в коде обычно считается непрофессиональным. (Мнения могут отличаться здесь)

Не делайте вонючий код вашей подписи

Ваша «подпись» или то, как вы отличаете свой код от других, должна быть сделана со вкусом и никоим образом не препятствовать вашему «запаху» кода. Вот почему я настоятельно не рекомендую следующее:

  • Преднамеренно неправильно написанные вещи (переменные, имена методов)
  • Умышленное добавление «странностей» кода, таких как no-ops, для маркировки кода как вашего.
  • Использование нестандартной или необычной структуры кода (пробел, разрывы строк и т. Д.)
  • Использование нестандартных или необычных шаблонов кодирования (фактическая логика кода)
  • Ненужное запутывание кода (захоронение методов в методах без причины)
  • Любой другой вид обмана кода или волшебства, чтобы попытаться отличить его необычным способом.

Тогда как мне защитить мой код ?!

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

Я хочу сделать это публичным, но не допустить его плагиата

Просто нет ... Безусловно, грязная магия в вашем коде может выделить плагиата, если он сделает свой код доступным ... а они этого не сделают .

Это также заставит вас выглядеть ужасно, когда другие просматривают ваш код и уходят. "Что, черт возьми, со всеми опечатками и без операций?"

Но я хочу подпись кода, что-то, что я могу посмотреть на код и сказать, что я сделал это, это был я, это мое

Честно говоря, если вы хорошо пишете код, он, как правило, должен быть неотличим от любого другого кода в проектах, над которыми вы работаете. Конечно, это могут быть нюансы, которые позволят вам узнать, над чем вы работали, а не то, что делал Боб, но они должны быть довольно мягкими.

Единственный временной код, который выделяется среди сверстников, это то, что что-то новое и никогда не было сделано в вашем кругу, или оно пахнет уникальным для вашего круга.

RualStorge
источник
Вы хотите «против», а не «стихи». Если только вы и Боб не пишете стихи. ;)
Дэвид Конрад
@DavidConrad Спасибо, код - это поэзия, в конце концов;) исправлено соответствующим образом.
RualStorge
1

Учитывая, что проблема заключается в том, чтобы скрыть подпись в исходном коде, где

  • это не будет сразу очевидно
  • он не может быть удален случайно или случайно
  • он может быть найден при необходимости до уровня уверенности, который будет доказательством.

Интересная вариация по стеганографии .

Вы не можете использовать форматирование или пробелы, потому что это может быть тривиально удалено любой компетентной IDE.

Это действительно оставляет только именование переменных и функций. Вы не можете использовать общую отличительную подстроку, потому что она слишком легко удаляется поиском и заменой. Это оставляет использование отличительных и оригинальных имен переменных, которые должны быть удалены по отдельности. Орфографические ошибки и иностранные слова являются хорошими кандидатами.

if (a== x) {}   // disappears on reformatting
int gghhjj_i;   // easily removed by search and replace, if all the same
int couunt = 0;  //spelling
int nummer = 0; // german
float doppel = 0.0; // german
string spago = "xx"; // italian
boolean manana = true; // spanish
struct perzon;  // excess use of z's.
class employeej; // what if every variable contained a 'j'?

Возможности для творчества безграничны!

Тогда некоторая простая обработка текста для извлечения и сравнения токенов быстро обнаружит плагиатов.

david.pfx
источник
2
Я на самом деле собираюсь препятствовать этому. В то время как A приветствует творческий подход к решению этой проблемы, он может привести к привычкам, с которыми не хочет иметь дело профессионал. Поправка к письму и т. Д. Не плоха, но преднамеренное написание - ужасная привычка, когда вы начинаете работать в команде. «О, эй, это в папке« common »», «Я не нахожу ни одной папки с именем« common »», «О, дерьмо, я имею в виду« commom »», «... это тот« com_mom »,« comm_mom »,» commmom 'или' commom '... "
RualStorge
Вы, очевидно, не работали с некоторыми аутсорсерами, для которых английский не является родным языком. Я насчитал 11 различных вариантов написания слова «объявление» (по крайней мере, так оно и есть).
david.pfx
У меня «Commom» оказался именно таким образом. Это было чем-то, с чем мы жили, пока это не разозлило кого-то настолько, чтобы исправить любое оскорбительное слово дня. Добавление к этой проблеме для того, чтобы выделиться как «ваша подпись» достойно
лишнего
@RualStorge: Ах. Гениальный ответ, но, может быть, не тот, на котором стоит пускаться на собеседование?
david.pfx
1
Нет, но опять же есть много вещей, о которых никто не говорит в процессе собеседования. Например, войти в компанию с плохим управлением проектами ... Нельзя сказать, что они планируют активно использовать тонкие уловки и пограничное неповиновение, чтобы улучшить практику и политику компании, но мы здесь;)
RualStorge
1

Предложение duozmo о noops может привести к плохим оценкам небрежности, но это может быть полезно для включения в пример кода, который не должен использоваться дословно.

Это вдохновило меня на мысль о чередующемся шаблоне подписи табуляции и пробелов в начальных и конечных пробелах.

Энди Дент
источник
4
Для него уже есть язык - en.wikipedia.org/wiki/Whitespace_(programming_language)
Ондрей Швейдар,
0

Нечто похожее, что я использовал ранее, - это создание переменных, названных так же, как и другие важные переменные, но обозначим их имена в зависимости от текстового редактора, чтобы изменение не было очевидным, или использовали буквы с ударениями. Вызовите несколько функций, в которые вы отправляете многие важные переменные программы из оператора if, используя ваши переменные, которые никогда не будут истинными, например, if (1eft == wrōng) Установите некоторую важную переменную в бесполезной функции для вашей запутанной подписи.

Вы должны быть в состоянии найти несколько учебных пособий на тему «Как писать не поддерживаемый код», которые могут помочь.

sanepete
источник
Однако это должно потерять ваши оценки, так как программы не так хороши, как должны, а ТА не смогут их прочитать
user151019
Ваша оценка будет оштрафована за это, как правило, если замечено. Никто не любит, когда вы идете в поиске "logRepository" только, чтобы найти, что это на самом деле "1ogRepository", это просто заставляет вас выглядеть плохо.
RualStorge
Это сказал мне. Я возьму свое пальто.
Санепете