Як я можу приховати свій підпис у програмі? [зачинено]


31

У нас є курс програмування університету, і студенти задають деякі питання програмування в нашій групі Facebook. Я трохи не вагаюся поділитися всіма своїми програмами, особливо якщо це щось круто для одного із завдань, оскільки вони переглядаються технічними службами, і вони можуть помітити, якщо хтось має ту саму програму і починають задавати питання, куди вона прийшла з. Але іноді мені хочеться поділитися кодом, щоб допомогти іншим, але я не хочу, щоб люди просто захоплювали мою роботу. (Уточнення: нам дозволяється співпрацювати із завданнями) Це, звичайно, тонка лінія. Хоча я хочу допомогти деяким людям, я переживаю, що вони можуть не мати академічної чесності самостійно переписувати код.

Більшість моїх однокурсників не дуже просунуті у своїх навичках, тому я б утік, скажу, ховаючи своє ім’я у кодованій рядку Base-64, витвореній на дискретному місці. Тим не менш, це може бути занадто очевидним, щоб випадкова струна сиділа навколо.

Які існують варіанти, щоб приховати моє ім’я в програмі, не виглядаючи підозрілим?

У CodeGolf я бачив, що вони зробили мистецтво ascii перетворюватися на інші речі, коли їх оцінювали. Чи є подібні стратегії, які я міг би використати? Ідеальним рішенням буде щось, що виглядає як щось, що стримано вписується, але насправді має функцію довести, що я кодував це з самого початку.

Пояснення: (Вибачте, я повинен був сказати це раніше) Нам дозволено співпрацювати, але нам потрібно пояснити наші програми ТА, щоб отримати бали. Це просто для задоволення, щоб сховати якісь пасхальні яйця в інший код, якщо він протікає, тим більше, що може виникнути спокуса обмінятися програмами, щоб перевірити, що відповіді на проблеми, які вони генерують, є рівнозначними тощо, або побачити, як інші вирішують проблему.


70
не діліться кодом, але діліться ідеями
ratchet freak

7
Те, що я робив кілька років тому, було мати змінну із конкретною назвою (в моєму випадку: "pkmn"), яку я використовував у кожному написаному коді, для речей, які не помітні (вид речі, яку ви зазвичай називаєте "i", " j "...). Коли хтось вкрав мій код, він не перейшов через весь код і залишив змінну недоторканою. Це був мій підпис.
DrakaSAN

29
Чому ви питаєте нас? Запитайте у свого професора чи технічної допомоги, яка відповідна поведінка у вашій школі .
Ерік Ліпперт

6
Це застосування стеганографії . Зазвичай додатки в реальному світі передбачають приховування повідомлень у звукових, зображувальних або інших втрачених форматах, але тут застосовується загальна справа. Прийнята відповідь хороша, але я б рекомендував також вивчити стеганографію.

2
Як щодо просто розміщення тонко зламаного коду?
Бенжол

Відповіді:


44

Використовуйте свій підпис не у своєму коді, а у загальнодоступному журналі розробки.

Опублікуйте свій код на загальнодоступному репортажі Github. Введіть Docblock зі своїм іменем у поле "Автор". Таким чином, публічний запис про те, що ви є фактичним автором програми.


Це може не кваліфікуватися як «приховування», але, на мою думку, це є. Якщо студент вирішить скопіювати ваш код, він подумає, що їм потрібно лише поміняти свій підпис на ваш. Уявіть їхнє здивування, коли ви представляєте публічні докази їхніх правопорушень. Щоб зробити їх гіршими, це доступно в Інтернеті. Ви навіть можете використовувати онлайн-інструмент, наприклад Diffchecker , щоб продемонструвати, які частини вашого коду були вкрадені!

РЕДАКТУВАТИ: Як зазначено в коментарях, переконайтеся, що ваша школа дозволяє поділитися своєю роботою таким чином! ОП зазначило, що з їхнім закладом це нормально, але ваш може не бути!


26
@exizt - Хоча це хороша ідея після шкільного середовища. У мене є сумніви, що більшість офіційних ситуацій у шкільному середовищі це сприймуть, оскільки врешті-решт ти все ще ділишся своєю роботою з іншими учнями. Найкраще залишити свою роботу в школі власною (і тільки Вашою), поки Ви не отримаєте оцінку за неї.
Рамхаунд

4
@exizt - Професорів турбує обман. Якщо професор не каже, що ти можеш працювати з іншим студентом, вони, як правило, сподіваються, що ти не пошкодиш коду від своїх однолітків. Якщо вам потрібно з програмою, ви очікуєте, що ви підете в технічну службу та / або професор, а не ваші колеги. З цієї причини я запропонував зберегти вашу роботу до себе, поки ви не отримаєте оцінку. Хоча його все тепле і нечітке автор хоче допомогти одноліткам, це не його проблема, вони не можуть виконати роботу без сторонньої допомоги. Він може допомогти просто не мати доказів такого вчинку. Якщо він хоче посидіти і щось пояснити
Рамхаунд,

4
Як це вирішить оригінальний автор? Людина, яка вкрала ваш код, може просто стверджувати, що вони написали його перед вашою Github Checkin, і що ви вкрали їх у них. Я не бачу цього вирішення проблеми у питанні.
Адам Девіс

7
Здійснивши TAE в моєму університеті, я знаю фактично (і спостерігаючи за тим, як це відбувається), що після цієї відповіді ви покладете на вас провини в академічному порядку. Мені невідома будь-яка політика університету в моїй країні (Австралія), яка б розрізняла копіювача та копіеія щодо плагіату, і я сумніваюся, що це було б істотно іншим де-небудь ще. Набагато безпечніше тримати свій код при собі!
сапі

2
Git дозволяє коміту встановлювати будь-які часові позначки, які вона хоче. Тому я сумніваюся, що ви можете покластися на git repo для будь-яких доказів.
Зан Лінкс

14

"оскільки вони переглядають технічні служби, і вони можуть помітити, якщо хтось має таку ж програму"

Я би сподівався, що це частина їх роботи з виявлення та покарання обману, плагіату та інших шахрайств.
А дублювати роботу інших і передавати її як свою - це обман і плагіат.

Настільки просто: не роздавайте свою роботу іншим. Допоможіть їм написати своє, якщо хочете, даючи їм ідеї, як вирішити проблеми, тоді нехай вони роблять своє кодування.


Бінго. Перше правило навчання - ви повинні допомогти людям самостійно знаходити рішення. Якщо ви не хочете, щоб люди крали ваш код, не дайте їм код. Якщо ви хочете допомогти їм, опублікуйте підказки, списки корисних алгоритмів та структур даних або описи рішення на високому рівні.
Шон Мак-Щось

2
Багато чого можна отримати від співпраці на рівні коду. 1) Тренуйтеся пояснювати код іншим 2) Налагоджувати робочі стосунки 3) Навчання талантів однокласників 4) Навчання у однокласників, коли у вас немає найкращого рішення. Групи, які об'єднують зусилля, перевершать зірок на островах. Однокласники завжди будуть фрінемами; ОП намагається максимально використати з боку друга, пом'якшуючи проти випадкових ворогів.
дуозмо

@duozmo нічого поганого в роботі разом (якщо завдання це, звичайно, дозволяє), доки ви не закінчите робити чужу роботу за них. І ні, мої однокурсники ніколи не були ворогами, коли я навчався в університеті. У гіршому випадку вони були конкурентами за найкращі завдання.
jwenting

7

Як і у наведеній вище відповіді, я рекомендую використовувати щось на зразок Github для реєстрації вашої розробки коду, є й інші методи, якими ви можете скористатись, щоб покрити спину, наприклад, надіслати повідомлення джерелу до того, як поділитися ним, хоча сховище, яке публічно можна переглянути що я настійно пропоную.

Звичайно, якщо обмін кодом дуже необхідний. Що з псевдокодом? або, як сказано у "храповику виродку", поділіться ідеєю, а не реалізацією. (це має більше сенсу для складнішого коду)


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, але набагато гірше. Якщо ви дійсно хочете допомогти товаришам,

Це все дуже хороші моменти! Я взагалі не вважав їх у своїй відповіді.
sbichenko

дякую за турботу, добрі моменти :) нам дозволено співпрацювати з іншими щодо виконання завдань, але я не хочу, щоб люди копіювали мій код для їх призначення, якщо я ділюсь ним деяким.
MikeFoxtrot

4

Картографи мають ту саму проблему . Пара технік:

  1. Введіть неправдоподібне відхилення від традиційного стилю вашої мови, наприклад, завжди є неврівноважені місця навколо операторів

    if (lefthand== righthand)

  2. Scatter немає-OPS в протягом вашого коду, якщо вони є частиною мови , який ви використовуєте.

    lefthand = righthand;;


(1) розвалиться, якщо студенти використовують щось на зразок автоформатера Eclipse. (2) з НОП - це приємно.
Річард Ле Месюр'є

Як би ви довели, що люди копіюють на вас, а не навпаки?
П’єр Арло

2
@ArlaudPierre, як одна людина раніше казала, хитрість - це занадто використовувати щось подібне для всіх програм з початку року, щоб ви могли довести, що ви це зробили навмисно, а інша людина цього не зробила.
MikeFoxtrot

Перший - відбілювач, і, як вказувалося, легко переможений форматером; другий дасть застереження в будь-якому хорошому IDE.
Девід Конрад

3

Запобігання плагіату НЕ у вашій роботі студентом, це суто в руках інструктора / ТА.

Взагалі кажучи, ставляться до школи як до закритого джерела. Ваші однокурсники - це колеги для інших роботодавців. Ви не можете ділитися кодом, окрім простих вкладишів тощо, і НІКОЛИ не ділитесь цілими класами чи проектами.

Приховування «великодніх яєць» у коді взагалі розглядається як непрофесійне. (Думки можуть відрізнятися тут)

Не робіть смердючий код своїм підписом

Ваш "підпис" або те, як ви відрізняєте свій код від інших, повинен бути смачним і не перешкоджати коду "запаху" жодним чином. Ось чому я сильно перешкоджаю наступному:

  • Навмисне неправильне написання речей (змінних, назв методів)
  • Навмисне додавання коду "дивацтва", як немає, для позначення коду як вашого.
  • Використання нестандартної або незвичної структури коду (пробіл, розрив рядків, тощо)
  • Використання нестандартних або незвичайних шаблонів кодування (фактична логіка коду)
  • Непотрібна обфузація коду (способи закопування в методах без причини)
  • Будь-який інший вид хитрості чи майстра, щоб спробувати розрізнити його незвично.

Тоді як захистити свій код ?!

Взагалі обмеження доступності - найкращий спосіб захистити свій код. Якщо ви не робите це загальнодоступним і ніхто не зламає ваш комп'ютер, ваш код, як правило, безпечний. Впевнений, що його можна декомпілювати, інженерно реверсувати тощо. На той момент це не так, як воно буде відповідати коду, який його все-таки створив.

Я хочу оприлюднити це, але запобігти його плагіату

Тільки ні ... Без сумніву, безладна майстерність у вашому коді могла б зробити плагіат виділяючись, припускаючи, що вони також роблять доступний свій код ... і вони не будуть .

Це також змусить вас виглядати жахливо, коли інші переглянуть ваш код і перейдуть. "що, чорт забирає, з усіма друкарськими помилками?

Але я хочу підписати код, щось можу подивитися на код і сказати, що я це зробив, це я, це моє

Чесно кажучи, якщо ви добре кодуєте, він, як правило, не відрізняється від будь-якого іншого коду в проектах, над якими ви працюєте. Звичайно, їхні моменти можуть бути нюансами, які дозволять вам знати, над чим ви працювали, порівняно з тим, що робив Боб, але вони повинні бути досить м'якими.

Єдиний часовий код сильно виділяється серед однолітків - це те, якщо щось нове і ніколи не робилося раніше у вашому колі, або він пахне унікальним для вашого кола.


Ви хочете "проти", а не "вірші". Якщо ви з Боб не пишете вірші. ;)
Девід Конрад

@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'?

Можливості для творчості безмежні!

Тоді кілька простих обробок тексту для вилучення та порівняння лексем швидко виявлять плагіати.


2
Я насправді відмовляюсь від цього. Хоча A вітаю творчий спосіб вирішення цієї проблеми, це може призвести до звичок, з якими не хоче займатися жоден професіонал. Внесення змін до листа тощо не є поганим, але навмисне написання помилок - це жахлива звичка, коли ви працюєте в командах. "О, так це в папці" загальна "," я не знаходжу жодної папки з назвою "загальна" "," О, лайно, я маю на увазі "комума" "," ... це те, що "com_mom", "comm_mom", " commmom ', або' commom '... »
RualStorge

Ви, очевидно, не працювали з певними джерелами, для яких англійська мова не є першою мовою. Я порахував 11 різних написань слова «оголошення» (принаймні, так я думаю, що вони були).
david.pfx

У мене "Commom" став саме таким. Це було щось, з чим ми жили, поки це не розізлило когось, достатнього, щоб виправити будь-яке кривдне слово дня. Додавання до цієї проблеми для того, щоб виділитись як "ваш підпис", гідний
прикмет

@RualStorge: Ага. Геніальна відповідь, але, можливо, не на те, щоб виступити на співбесіді?
david.pfx

1
Ні, але знову ж таки є багато багато чого, чого не скажеш в процесі інтерв'ю. Наприклад, увійти в компанію з поганим управлінням проектами ... Не можна сказати, що вони планують активно використовувати витончені заміни та прикордонну непідпорядкованість для вдосконалення практики та політики компанії, але ось ми;)
RualStorge

1

Пропозиція duozmo щодо noops, можливо, генерує погані оцінки для неохайності, але це може бути добре включити в приклад код, який не повинен використовуватися дослівно.

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



0

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

Ви маєте змогу знайти кілька навчальних посібників на тему "Як написати нездійснений код", який може допомогти.


Однак це повинно втратити ваші позначки, оскільки програми не такі хороші, як повинні бути, а також ТА не зможуть їх прочитати
user151019

За оцінку зазвичай буде накладено штраф, якщо це помічено. Нікому не подобається, коли ви переходите до пошуку "logRepository", лише щоб знайти це насправді "1ogRepository", це просто змушує вас виглядати погано.
RualStorge

Це мені сказали. Я дістану пальто.
sanepete
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.