Come posso nascondere la mia firma in un programma? [chiuso]

31

Abbiamo un corso di programmazione universitaria e altri studenti stanno facendo alcune domande di programmazione nel nostro gruppo su Facebook. Sono un po 'titubante nel condividere tutti i miei programmi, specialmente se è qualcosa di bello per uno dei compiti, poiché questi sono guardati dagli AT e potrebbero notare se qualcuno ha lo stesso programma e iniziare a fare domande su dove è arrivato a partire dal. Tuttavia, a volte mi piacerebbe condividere il mio codice per aiutare gli altri, ma non voglio che le persone si limitino ad afferrare il mio lavoro. (Chiarimento: siamo autorizzati a collaborare con i compiti) Questo è ovviamente una linea sottile Mentre voglio aiutare alcune persone, sono preoccupato che possano non avere l'onestà accademica per riscrivere il codice da soli.

La maggior parte dei miei compagni di studi non sono molto avanzati nelle loro capacità, quindi mi piacerebbe dire che nascondere il mio nome in una stringa codificata Base-64 realizzata in un luogo discreto. Tuttavia, potrebbe essere troppo ovvio per una stringa casuale essere seduti in giro.

Quali opzioni esistono per nascondere il mio nome in un programma senza sembrare sospetto?

Ho visto a CodeGolf che hanno trasformato l'arte asciutta in altre cose quando sono state valutate. Esistono strategie simili che potrei utilizzare? La soluzione ideale sarebbe qualcosa che assomiglia a qualcosa che si inserisce in modo discreto ma che in realtà ha una funzione per dimostrare che l'ho codificato dall'inizio.

Chiarimento: (Scusa, avrei dovuto dirlo prima) Ci è permesso collaborare, ma dobbiamo spiegare i nostri programmi agli AT per ottenere i punti. E 'solo per la soddisfazione nascondere alcune Uova di Pasqua nel codice di altri se fuoriescono, soprattutto perché potrebbe essere allettante scambiare programmi per verificare che le risposte ai problemi che generano siano equivalenti o per vedere come gli altri risolvono il problema.

    
posta MikeFoxtrot 05.05.2014 - 11:41
fonte

10 risposte

44

Utilizza la tua firma non nel tuo codice, ma in un registro di sviluppo accessibile pubblicamente.

Pubblica il tuo codice in un repository pubblico di Github. Includi un Docblock con il tuo nome nel campo "Autore". In questo modo c'è un record pubblico di te che sei l'autore effettivo del programma.

Questo potrebbe non essere un "nascondiglio", ma secondo me lo è. Se uno studente decide di copiare il tuo codice, penserà che devono solo cambiare la propria firma per il tuo. Immagina la loro sorpresa quando presenti prove pubbliche delle loro azioni illecite. Per peggiorare le cose per loro, è accessibile online. Puoi anche utilizzare uno strumento online, come Diffchecker , per dimostrare quali parti del tuo codice sono state rubate!

EDIT: come indicato nei commenti, assicurati che la tua scuola permetta di condividere il tuo lavoro in questo modo! OP ha indicato che la loro istituzione è OK con questo, ma il tuo potrebbe non essere!

    
risposta data 05.05.2014 - 11:53
fonte
14

"dal momento che questi vengono esaminati dagli agenti di servizio e potrebbero notare se qualcuno ha lo stesso programma"

Lo spero, fa parte del loro lavoro rilevare e punire imbrogli, plagio e altre frodi.
E duplicare il lavoro degli altri e spacciarlo come se fosse proprio questo, imbrogli e plagio.

Così semplice: non dare il tuo lavoro agli altri. Aiutali a scrivere da soli se vuoi dando loro delle idee su come risolvere i problemi, poi lascia che facciano il loro codice.

    
risposta data 05.05.2014 - 12:48
fonte
7

Come la risposta di cui sopra, incoraggio l'utilizzo di qualcosa come Github per registrare lo sviluppo del codice, ci sono altri metodi che puoi usare per coprire la tua schiena come inviare via e-mail la fonte a te stesso prima della condivisione di esso, anche se pubblicamente repository visualizzabile è quello che suggerirei strongmente.

Ovviamente se la condivisione del codice è altamente necessaria. Che mi dici dello pseudo-codice? o come "maniaco del cricchetto" ha dichiarato, condividere l'idea non l'attuazione. (questo ha più senso per un codice più complesso)

    
risposta data 05.05.2014 - 12:03
fonte
7

Potresti anche usare uno dei trucchi più vecchi per nascondere i messaggi. Fai in modo che la prima lettera di ogni variabile nasconda un messaggio. Ad esempio,

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

// Do some work here?
    
risposta data 06.05.2014 - 02:45
fonte
6

Penso che GitHub o una soluzione simile sia ok, ma ci sono due cose da considerare:

  • Questo è ancora dare il tuo lavoro ad altri che dovrebbero farlo da soli, quindi potrebbe essere punibile, non importa se si nasconde o meno un uovo di Pasqua.
  • La politica della scuola potrebbe in effetti essere piuttosto restrittiva per queste cose. In Germania, ad esempio, ci sono un certo numero di università, che persino fanno firmare ai loro studenti una sorta di "contratto", in cui si afferma che tutto ciò che sviluppano come parte di un incarico dato in questo e quel corso è di proprietà dell'università e non può essere distribuito in alcuna forma senza il permesso esplicito dell'istituzione. Quindi prima di postare materiale scolastico su Internet consiglio vivamente di chiedere (di solito ci sono persone che lavorano su queste cose in ogni istituzione educativa e scientifica), perché potresti davvero metterti nei guai e con ciò non intendo solo ottenendo una F, ma molto peggio. Se vuoi davvero aiutare i tuoi amici, puoi chiedere al tuo professore se puoi essere un tutor o qualcosa di simile e fare tutto allo scoperto.
risposta data 05.05.2014 - 16:49
fonte
4

I cartografi hanno il stesso problema . Un paio di tecniche:

  1. Introduci un'improbabile devianza dallo stile tradizionale della tua lingua, ad es. avere sempre spazi sbilanciati attorno agli operatori

    if (lefthand== righthand)

  2. Scatter no-ops per tutto il tuo codice, se fanno parte della lingua che stai utilizzando.

    lefthand = righthand;;

risposta data 06.05.2014 - 04:04
fonte
3

Prevenire il plagio in NON il tuo lavoro come studente, è puramente nelle mani di un istruttore / TA.

In generale, trattare la scuola come se fosse un business chiuso. I tuoi compagni di studio sono colleghi di altri datori di lavoro. Non puoi condividere codice oltre a semplici liner e simili, e MAI condividere intere classi o progetti.

Nascondere le "uova di Pasqua" nel codice è generalmente considerato poco professionale. (Le opinioni possono variare qui)

Non rendere maleodorante la tua firma

La tua "firma" o il modo in cui differenzia il tuo codice dagli altri dovrebbero essere di buon gusto e non impedire che il tuo codice "annusi" in alcun modo. Questo è il motivo per cui sconsiglio vivamente quanto segue:

  • Errare intenzionalmente a scrivere errori (variabili, nomi di metodi)
  • Aggiungere intenzionalmente codice "stranezze" come no-op ai fini della marcatura del codice come il tuo.
  • Uso di una struttura di codice non standard o insolita (spazio bianco, interruzioni di riga, ecc.)
  • Uso di schemi di codifica non standard o insoliti (logica del codice reale)
  • Obsolutivo occultamento del codice (seppellire metodi con metodi senza motivo)
  • Qualsiasi altro tipo di inganno del codice o magia per cercare di distinguerlo in modo insolito.

Allora come proteggi il mio codice?!

In generale, limitare la disponibilità è il modo migliore per proteggere il codice. Se non lo rendi pubblico e nessuno ti fa hackerare il tuo computer il tuo codice è generalmente sicuro. Certo, potrebbe essere decompilato, decodificato, ecc. A quel punto non è come se corrispondesse al codice che lo ha generato comunque.

Voglio renderlo pubblico, ma impedire che venga plagiato

Semplicemente no ... In ogni caso, la magrezza disordinata del tuo codice potrebbe far risaltare un plagiatore presumendo che rendano disponibile il loro codice ... e non lo faranno .

Ti farà anche sembrare terribile quando gli altri guardano il tuo codice e vanno. "che diavolo c'è con tutti gli errori di battitura e le no-op?"

Ma voglio una firma del codice, qualcosa che possa guardare il codice e dire I ha fatto questo, sono stato io, questo è mio

Onestamente, se codifichi bene, in genere dovrebbe essere indistinguibile da qualsiasi altro codice nei progetti su cui lavori. Certo potrebbero essere sfumature che ti permettono di sapere su cosa hai lavorato rispetto a quello che ha fatto Bob, ma dovrebbero essere abbastanza miti.

L'unico codice temporale si distingue in modo significativo tra i colleghi è se qualcosa è nuovo e non è mai stato fatto prima all'interno della tua cerchia, o odora in un modo unico per la tua cerchia.

    
risposta data 06.05.2014 - 16:32
fonte
1

Dato che il problema è nascondere una firma nel codice sorgente dove

  • non sarà immediatamente evidente
  • non può essere rimosso casualmente o accidentalmente
  • può essere recuperato trovato quando necessario, fino a un livello di certezza che costituirebbe una prova.

Una variazione interessante su Steganography .

Non puoi usare la formattazione o lo spazio bianco, perché questo può essere banalmente rimosso da qualsiasi IDE competente.

Questo lascia solo nomi di variabili e funzioni. Non è possibile utilizzare una sottostringa comune comune, perché è rimossa troppo facilmente da una ricerca e sostituzione. Ciò lascia l'uso di nomi di variabili distintivi e originali che dovrebbero essere rimossi singolarmente. Gli errori di ortografia e le parole in lingua straniera sono buoni candidati.

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

Le opportunità per la creatività sono illimitate!

Quindi alcuni semplici processi di elaborazione del testo per estrarre e confrontare i token scopriranno rapidamente i plagi.

    
risposta data 06.05.2014 - 09:43
fonte
1

Il suggerimento di duozmo di noops potrebbe generare cattivi voti per la sciatteria, ma potrebbe essere una buona cosa includere nel codice di esempio che non dovrebbe essere usato testualmente.

Questo mi ha spinto a pensare a un modello di firma alternata di schede e spazi in spazi bianchi iniziali e finali.

    
risposta data 06.05.2014 - 09:23
fonte
0

Qualcosa di simile che ho usato prima è quello di creare variabili con lo stesso nome di altre variabili importanti, ma assegnare i loro nomi a seconda dell'editor di testo in modo che la modifica non sia facilmente ovvia, o utilizzare le lettere con accenti. Chiama diverse funzioni, alle quali invii molte delle variabili importanti del programma da un'istruzione if, utilizzando le tue variabili, che non saranno mai vere, ad esempio se (1eft == wrōng) Imposta alcune variabili importanti in una funzione inutile per la tua firma offuscata.

Dovresti riuscire a trovare diversi tutorial su "Come scrivere codice non gestibile" che potrebbe essere di aiuto.

    
risposta data 06.05.2014 - 12:57
fonte

Leggi altre domande sui tag