프로그램에서 서명을 숨기려면 어떻게해야합니까? [닫은]


31

우리는 대학 프로그래밍 과정을 가지고 있으며 동료 학생들은 Facebook 그룹에서 프로그래밍 질문을합니다. 나는 TA에 의해 검토되고 누군가가 같은 프로그램을 가지고 있는지와 그들이 어디에서 왔는지 질문하기 시작할 수 있기 때문에 모든 과제를 공유하는 것이 조금 주저합니다. 특히 과제 중 하나에 대해 멋진 것이면 특히 그렇습니다 에서. 그럼에도 불구하고 때로는 다른 사람들을 돕기 위해 코드를 공유하고 싶지만 사람들이 내 일을 잡는 것을 원하지 않습니다. (설명 : 우리는 작업과 협력 할 수 있습니다.) 이것은 물론가는 선입니다. 일부 사람들을 돕고 싶지만 스스로 코드를 다시 작성해야하는 학문적 정직함이 없을 수도 있습니다.

대부분의 동료 학생들은 실력이 뛰어나지 않으므로 별도의 장소에 만들어진 Base-64로 인코딩 된 문자열에 내 이름을 숨기고 싶습니다. 그러나 임의의 문자열이 주위에 앉아 있기에는 너무 분명 할 수 있습니다.

의심하지 않고 프로그램에서 내 이름을 숨기려면 어떤 옵션이 있습니까?

CodeGolf에서 아스키 아트를 평가할 때 다른 것으로 바꿨다는 것을 알았습니다. 내가 사용할 수있는 비슷한 전략이 있습니까? 이상적인 솔루션은 신중하게 맞는 것처럼 보이지만 실제로는 처음부터 코딩했음을 증명하는 기능이 있습니다.

설명 : (죄송합니다. 앞서 말 했어야합니다.) 우리는 협력 할 수는 있지만 포인트를 얻으려면 TA에 프로그램을 설명해야합니다. 누출되는 경우 다른 부활절 코드에 일부 부활절 달걀을 숨기는 것이 만족 스럽습니다. 특히 생성 된 문제에 대한 답변이 동등한 지 확인하거나 다른 사람들이 문제를 해결하는 방법을 확인하기 위해 프로그램을 교환하고 싶을 수 있습니다.


70
코드를 공유하지 말고 아이디어를 공유하십시오
ratchet freak

7
몇 년 전에 내가 한 것은 눈에 띄지 않는 것들 (보통 "i"라고 부르는 종류, " j "...). 누군가 내 코드를 훔 쳤을 때 모든 코드를 거치지 않고 변수를 그대로 두었습니다. 그건 내 서명이었다.
DrakaSAN

29
왜 우리에게 물어 보니? 교수 또는 조교에게 학교에서 적절한 행동이 무엇인지 물어보십시오 .
Eric Lippert

6
이것은 스테 가 노 그라피 의 응용 프로그램입니다 . 일반적으로 실제 응용 프로그램은 소리, 이미지 또는 기타 손실이있는 형식으로 메시지를 숨기는 것이 일반적이지만 여기에 일반적인 경우가 적용됩니다. 인정되는 답변은 좋은 것이지만 스테 가노 그래피에 대해서도 배우는 것이 좋습니다.

2
미묘하게 깨진 코드를 게시하는 것은 어떻습니까?
Benjol

답변:


44

코드가 아닌 공개적으로 액세스 가능한 개발 로그에 서명을 사용하십시오.

공개 Github 저장소에 코드를 게시하십시오. "작성자"필드에 이름이있는 Docblock을 포함 시키십시오. 이런 식으로 프로그램의 실제 저자라는 공개 기록이 있습니다.


이것은 "숨김"으로 인정되지 않을 수도 있지만 제 생각에는 그렇지 않습니다. 학생이 코드를 복사하기로 결정한 경우 서명을 본인의 것으로 바꾸면된다고 생각합니다. 자신의 잘못에 대한 공개 증거를 제시 할 때 놀라움을 상상해보십시오. 문제를 악화시키기 위해 온라인으로 액세스 할 수 있습니다. Diffchecker 와 같은 온라인 도구를 사용 하여 코드의 도난당한 부분을 보여줄 수도 있습니다!

편집 : 의견에서 지적했듯이 학교 가이 방법으로 작업을 공유 할 수 있도록하십시오! OP는 그들의 기관이 이것으로 괜찮다는 것을 나타내었지만 당신의 기관은 그렇지 않을 수도 있습니다!


26
@exizt-이것은 학교 환경 후에 좋은 생각입니다. 학교 환경 내에서 대부분의 공식적인 상황이 이것을 받아 들일 것이라고 의심합니다. 결국 당신은 여전히 ​​다른 학생들과 당신의 작업을 공유하기 때문입니다. 성적을받을 때까지 학교는 혼자서 (그리고 혼자) 내버려 두는 것이 가장 좋습니다.
Ramhound

4
@exizt-교수들은 부정 행위에 대해 걱정하고 있습니다. 교수가 다른 학생과 함께 일할 수 있다고 말하지 않는 한 그들은 보통 동료들로부터 코드를 빌리지 않을 것으로 기대합니다. 이 프로그램에 필요한 경우, 동료가 아닌 TA 및 / 또는 교수에게 갈 것으로 기대할 수 있습니다. 그 이유는 성적을받을 때까지 본인의 업무를 계속 제안하는 이유입니다. 저자는 따뜻하고 애매 모호하지만 동료가 자신의 문제가 아니라 도움을주기를 원하지만 도움 없이는 일을 할 수 없습니다. 그는 거기에 앉아서 무언가를 설명하고 싶다면 그러한 행위의 증거를 얻지 못하도록 도울 수 있습니다
Ramhound

4
이것이 원래 저자를 어떻게 해결합니까? 코드를 훔친 사람은 단순히 github 체크인 전에 코드를 작성했으며 코드를 훔쳤다고 주장 할 수 있습니다. 나는 이것이 문제의 문제를 다루는 것을 보지 못했다.
Adam Davis

7
대학에서 TA를 취득한 결과,이 답변을 따르면 학업 위반으로 인용 될 수 있다는 사실을 알고 있습니다. 나는 표절과 관련하여 필자와 필자를 구분하는 우리 나라 (호주)의 대학 정책을 알지 못하며, 그것이 다른 곳에서는 실질적으로 다를 것이라고 의심합니다. 코드를 자신에게 보관하는 것이 훨씬 안전합니다!
sapi

2
힘내 커밋은 원하는 타임 스탬프를 설정할 수 있습니다. 그래서 나는 당신이 어떤 종류의 증거를 위해 자식 저장소에 의지 할 수 있는지 의심합니다.
Zan Lynx

14

"이것들은 TA에 의해 검토되고 누군가가 같은 프로그램을 가지고 있는지 알아 차릴 수

있기 때문에 " 나는 바람 피기, 표절 및 기타 사기를 감지하고 처벌하는 것이 그들의 일이다.
그리고 다른 사람들의 작품을 복제하고 자신의 것으로 전달하는 것은 부정 행위와 표절입니다.

매우 간단합니다. 다른 사람에게 작업을 포기하지 마십시오. 문제를 해결하는 방법에 대한 아이디어를 제공하여 원하는 경우 스스로 작성하도록하고 스스로 코딩하도록하십시오.


빙고. 개인지도의 첫 번째 규칙은 사람들이 스스로 해결책을 찾도록 도와야한다는 것입니다. 사람들이 귀하의 코드를 도용하지 못하게하려면 코드를 제공하지 마십시오. 도움이 필요하면 힌트, 유용한 알고리즘 및 데이터 구조 목록 또는 솔루션에 대한 높은 수준의 설명을 게시하십시오.
Sean McSomething

2
코드 수준의 협업을 통해 얻을 수있는 것이 많습니다. 1) 다른 사람에게 코드를 설명하는 연습 2) 업무 관계 구축 3) 반 친구들의 재능 배우기 4) 최상의 솔루션이 없을 때 반 친구들로부터 배우기. 노력을 모으는 그룹은 섬에서 별을 능가합니다. 동료 학생들은 항상 열광적입니다. OP는 가끔 적을 상대로 완화하면서 친구 쪽에서 최대한의 노력을 기울이고 있습니다.
duozmo

@duozmo는 다른 사람의 작업을 끝내지 않는 한 함께 작업하는 데 아무런 문제가 없습니다 (할당이 허용되는 경우). 그리고 아니, 내 동료 학생들은 내가 대학에있을 때 결코 적이 아니 었습니다. 최악의 경우 그들은 가장 좋은 임무를 수행하기위한 경쟁자였습니다.
jwenting

7

위의 답변과 같이 코드 개발을 기록하기 위해 Github과 같은 것을 사용하는 것이 좋습니다. 공개적으로 볼 수있는 저장소는 있지만 공유하기 전에 소스를 이메일로 보내는 것과 같이 등을 가리는 데 사용할 수있는 다른 방법이 있습니다 내가 강력하게 제안하는 것.

물론 코드 공유가 필요한 경우에도 마찬가지입니다. 의사 코드는 어떻습니까? 또는 "ratchet freak"과 같이, 구현이 아닌 아이디어를 공유하십시오. (이것은 더 복잡한 코드에 더 적합합니다)


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. 사용중인 언어의 일부인 경우 코드 전체에서 분산이 발생 하지 않습니다 .

    lefthand = righthand;;


(1) 학생들이 Eclipse의 자동 포맷터와 같은 것을 사용하면 붕괴 될 것입니다. (2) NOP와 함께 좋은 것입니다.
Richard Le Mesurier

사람들이 당신에게 다른 방법으로 복사하지 않았다는 것을 어떻게 증명할 수 있습니까?
Pierre Arlaud

2
@ArlaudPierre는 한 사람이 이전에 트릭이 올해 초부터 모든 프로그램에 이와 같은 것을 사용한다고 말했기 때문에 의도적으로 해냈고 다른 사람이하지 않았다는 것을 증명할 수 있습니다.
MikeFoxtrot

첫 번째는 표백 이며, 지적했듯이 포맷터에 의해 쉽게 격파됩니다. 두 번째는 좋은 IDE에서 경고를 줄 것입니다.
David Conrad

3

학생으로서의 직무 가 아닌 표절 예방 은 순전히 강사 / TA의 손에 달려 있습니다.

일반적으로 말하기 학교는 폐쇄 소스 비즈니스와 같습니다. 동료 학생들은 다른 고용주의 동료입니다. 단순한 라이너 이외의 코드는 공유 할 수 없으며 전체 클래스 또는 프로젝트를 공유 하지 마십시오 .

코드에서 "부활절 달걀"을 숨기는 것은 일반적으로 전문가가 아닌 것으로 간주됩니다. (여기에 의견이 다를 수 있습니다)

냄새 나는 코드를 서명하지 마십시오

귀하의 "서명"또는 코드를 다른 코드와 구별하는 방법은 맛이 좋으며 코드의 "냄새"를 방해하지 않아야합니다. 이것이 내가 다음을 강력히 권장하지 않는 이유입니다.

  • 의도적으로 철자가 잘못된 것 (변수, 메소드 이름)
  • 의도적으로 코드를 표시하기 위해 no-ops와 같은 코드 "oddities"를 의도적으로 추가합니다.
  • 비표준 또는 비정상적인 코드 구조 사용 (공백, 줄 바꿈 등)
  • 비표준 또는 비정상적인 코딩 패턴 사용 (실제 코드 로직)
  • 불필요한 코드 난독 화 (이유가없는 방식으로 메소드를 포함하는 방식)
  • 특이한 방식으로 시도하고 구별하는 다른 종류의 코드 속임수 또는 마법사.

그렇다면 내 코드를 어떻게 보호합니까?!

일반적으로 가용성을 제한하는 것이 코드를 보호하는 가장 좋은 방법입니다. 공개하지 않고 아무도 컴퓨터를 해킹 하지 않으면 코드는 일반적으로 안전합니다. 물론 디 컴파일, 리버스 엔지니어링 등이 가능합니다. 그 시점에서 어쨌든 그것을 생성 한 코드와 일치하지 않습니다.

공개하고 싶지만 표절되는 것을 방지하고 싶습니다.

그냥 안 돼요 ... 코드에서 지저분한 마법사가 코드를 사용할 수 있다고 가정하면 표절자가 눈에 띄게 만들 수 있습니다 .

또한 다른 사람들이 귀하의 코드를 살펴보고 갈 때 끔찍하게 보일 것입니다. "도대체 오타가없는 건 대체 뭐야?"

하지만, 내가 코드를 볼 수있는 무언가를 코드 서명을 원하고 말을 내가 이런 짓을, 그것은 나를했다,이 광산은

솔직히 코드를 잘 작성하면 일반적으로 작업하는 프로젝트의 다른 코드와 구별 할 수 없어야합니다. 그들의 뉘앙스가 당신이 무엇을했는지, 밥이했는지를 알려주는 뉘앙스 일 것입니다. 그러나 이것들은 상당히 온화합니다.

유일한 타임 코드는 동료들 사이에서 큰 방식으로 눈에 띄는 것은 새로운 것이어서 서클 내에서 전에 해본 적이 없거나 서클 고유의 방식으로 냄새가 나는 경우입니다.


당신은 "절"이 아니라 "대"를 원합니다. 당신과 밥이시를 쓰지 않는 한. ;)
David Conrad

@DavidConrad 감사합니다. 코드는 결국시입니다;) 그에 따라 수정되었습니다.
RualStorge

1

문제는 소스 코드에서 서명을 숨기는 것입니다.

  • 그것은 즉시 명백하지 않을 것이다
  • 우연히 또는 실수로 제거 할 수 없습니다
  • 필요할 때 발견 될 수 있으며 증거를 구성하는 확실성 수준으로 회복 될 수 있습니다.

Steganography 에 대한 흥미로운 변형 .

포맷이나 공백은 유능한 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
나는 실제로 이것을 실망시키지 않을 것입니다. 이 문제를 해결하는 창조적 인 방법을 칭찬하는 동안 전문가가 다루고 싶지 않은 습관이 생길 수 있습니다. 편지 수정 등은 나쁘지 않지만 의도적으로 철자가 틀리면 팀에서 일할 때 끔찍한 습관입니다. "오, 이건 '공통'폴더에 있습니다.", " '공통'이라는 이름의 폴더를 찾을 수 없습니다.", "아 아아아, 난 'commom'을 의미합니다.", "...는 'com_mom', 'comm_mom', ' commmom '또는'commom '... "
RualStorge

당신은 분명히 영어가 모국어가 아닌 특정 아웃소싱 업체와 함께 일하지 않았습니다. 나는 '발표'라는 단어의 11 가지 철자를 세었다 (적어도 그것이 내가 생각했던 것임).
david.pfx

나는 "Commom"이 그와 같은 방식으로 왔습니다. 그것은 오늘의 기분 나쁜 말이 무엇이든 고칠 수있을 정도로 누군가를 화나게 할 때까지 우리가 살았던 것입니다. "귀하의 서명"으로 눈에 띄는 목적으로이 문제를 추가하는 것은 가치가 있습니다
RualStorge

@RualStorge : 아. 독창적 인 답변이지만 인터뷰에서 뛸 사람이 아닌가?
david.pfx

1
아니요, 그러나 다시 한 번 인터뷰 과정에서 말하지 않은 많은 것들이 있습니다. 프로젝트 관리가 열악한 회사에 입국하는 등 ... 미묘한
하위 패배


0

내가 이전에 사용한 것과 비슷한 것은 다른 중요한 변수와 같은 이름의 변수를 작성하지만 텍스트 편집기에 따라 이름을 바꾸어 변경 사항이 분명하지 않거나 악센트가있는 문자를 사용하는 것입니다. if (1eft == wrōng) 변수를 사용하여 if 문에서 많은 프로그램의 중요한 변수를 보내는 여러 함수를 호출합니다.

도움이 될 수있는 '유지 불가능한 코드를 작성하는 방법'에 대한 여러 자습서를 찾을 수 있어야합니다.


그들이해야하며, 또한 조교가 읽을 수 없으므로 프로그램이 좋은으로하지 않습니다 그러나 이것은 당신에게 점수를 잃게한다
user151019

귀하의 성적은 일반적으로 통지 된 경우 이에 대해 처벌됩니다. "logRepository"를 검색 할 때 실제로 "1ogRepository"라는 것을 발견 할 때 아무도 좋아하지 않습니다.
RualStorge

저에게 말해요. 코트를 가져 오겠습니다.
sanepete
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.