98

先週、宿題のために小さな GUI を作成しなければなりませんでした。私の学校の友達は誰もそれをしませんでした。彼らは私たちがアップロードしなければならなかった場所から私のものを盗み、それを彼らのものとして再びアップロードしました. 私が先生にそれはすべて私の仕事だと言ったとき、彼は私を信じませんでした.

そこで、自分がコーディングした証明と一緒に、無駄なメソッドとかを入れてみようと思いました。暗号化を考えました。今までの私の最高のアイデア:

String key = ("ZGV2ZWxvcGVkIGJ5IFdhckdvZE5U"); //My proof in base64

他にもっと良い方法を考えられますか?

4

11 に答える 11

105

私はずっと前にあなたと同じ問題を抱えていました。私たちは Windows 2000 マシンを使用し、誰もが見ることができる Novel ネットワーク フォルダにファイルをアップロードしました。私はいくつかのトリックを使用して、最高の泥棒でさえ打ち負かしました。空白の透かし。メタデータ透かし; 珍しいキャラクター; 信頼できるタイムスタンプ; 手口。ここにそれらを順番に示します。

空白の透かし:

これは、透かしに対する私の最初の貢献です。テキスト ファイルで機能する、目に見えない透かしが必要でした。私が思いついたトリックは、プログラミング ステートメント (または段落) の間に特定のパターンの空白を挿入することでした。ファイルは同じように見えました: いくつかのプログラミング ステートメントと改行です。テキストを慎重に選択すると、空白が表示されます。各空の行には、明らかにランダムでも偶発的でもない特定の数のスペースが含まれます。(例 17) 実際には、この方法でうまくいきました。ドキュメントに何を埋め込んでいるのかを理解できなかったからです。

メタデータの透かし

ここで、情報を含むようにファイルのメタデータを変更します。ファイルの目に見えない部分、特に EXE に、名前やハッシュなどを埋め込むことができます。NT 時代には、オルタネート データ ストリームが一般的でした。

珍しいキャラクター

キックのためにこれを投げます。古い IRC のなりすましのトリックは、別の人の名前に似た文字で名前を作成することでした。これを透かしに使用できます。Windows の Character Map は、ソース コードで使用する可能性のある文字や数字に似ているがそうではない多くの珍しい文字を提供します。これらが他の誰かの作品の特定の場所に現れるのは偶然ではありません。

信頼できるタイムスタンプ

簡単に言えば、ファイル (またはそのハッシュ) をサード パーティに送信し、サード パーティがタイムスタンプを追加して秘密鍵で署名します。ドキュメントをいつ作成したかの証明が必要な人は、信頼できるサード パーティ (多くの場合は Web サイト) にアクセスして、作成時刻の証明を確認できます。これらは、知的財産紛争の裁判で使用されているため、非常に強力な証拠です。これらは、求めている証明を達成するための標準的な方法です。(最初に他のものを含めました。それらは簡単で、より楽しく、おそらく機能します。)

このウィキペディアの記事は、インストラクターがあなたの証拠を理解するのに役立つかもしれません。外部リンクのセクションには、無料のものを含む多くのプロバイダーがあります。重要なことに使用する前に、無料のファイルで数日間テスト ファイルを実行していました。

手口

それで、あなたは何かをしました、そしてあなたは今証拠を持っていますよね?いいえ、学生は、あなたがアイデアを盗んだとか、他のナンセンスだと言うことができます。これに対する私の修正は、個人的に、インストラクターと一緒に私の方法の1つ以上を確立することでした. 私はインストラクターに、空白や特定の記号などを探すように言いますが、他の人には透かしが何であるかを決して教えないようにします。インストラクターがあなたの簡単なテクニックを秘密にしておくことに同意するなら、彼らはおそらくうまくいきます. そうでない場合は、常に信頼できるタイムスタンプがあります。;)

于 2013-04-17T17:34:20.200 に答える
63

クラスメートがアップロード サイトからあなたのコードを盗んだ場合、私はあなたの宿題を暗号化し、キーを教師にメールで送信します。複雑にしたい場合、またはパスワード付きの Zip ファイルのように単純なものにしたい場合は、PGP を使用してこれを行うことができます。

編集: PGP を使用すると、キーを公開せずに暗号化/署名できますが、パスワードを使用した Zip ファイルの単純さに勝るものはないため、宿題ごとに新しいキーを選択するだけです。シンプルな美しさ:)

于 2013-04-17T14:18:54.333 に答える
39

教師にソース コードを渡す場合はserialVersionUID、クラス ファイルの 1 つに、あなたの名前の暗号化されたバージョンである を追加するだけです。自分で先生に解読できます。

それはあなたにとってだけで、他の人にとっては何の意味もありません。それは生成されたコードであると言えます。もし彼らがそれを盗んだとしても、おそらくそれを変更する気にはならないでしょう。

スタイリッシュな方法でそれを行いたい場合は、このトリックを使用できます。自分の名前を生成するランダム シードが見つかった場合。:) それはあなたの番号であり、そのコードを作成したのがあなたであることを証明するように見える場所はどこでも.

于 2013-04-17T14:15:01.700 に答える
20

私には IT 管理の問題のように思えます。各生徒には、他の生徒がアクセスできない独自のアップロード領域が必要です。

教師は、各生徒のアップロード フォルダーにアクセスできる、より高いレベルになります。これが不可能な場合は、@exabrial の回答を使用してください。これが最も簡単な解決策です。

于 2013-04-17T18:48:35.063 に答える
9

できる最善の方法は、ソース コードをパスワード付きで圧縮し、そのパスワードを教師に電子メールで送信することです。

問題が解決しました。

于 2013-04-18T00:06:30.997 に答える
6

gitのような分散 (=スタンドアロン)バージョン管理システムを使用します。こちらも重宝しそう。

あなたの名前と日付が記載されたバージョン履歴は、十分に説得力があるかもしれません。

于 2013-04-17T14:20:07.637 に答える
3

土壇場でソリューションを投稿するだけです。これでは、誰もコピーする時間がありません。

また、管理者にフィードバックを送信して、学生が他の学生の課題を閲覧できないようにします。

于 2013-04-18T23:05:59.337 に答える
3

盗まれたものは何ですか?

  • 起源 ?ランダムな文字列を入れることができます (ただし、変更することはできます)。また、自分だけが知っている特別な動作を追加してみてください (特別なキーを押すと行の色が変わります)、「他の人はこの特別なコンボを知っていますか?」と先生に尋ねることができます。最善の方法は、5 分間のアクティビティの後、アーカイブに空の役に立たないファイルが存在しない場合、プログラムをクラッシュさせることです。

  • バイナリ?各 .class のチェックサムを比較するだけで十分です (学校の友達はクラス ファイルを書き直すのが面倒です)

于 2013-04-17T14:20:06.190 に答える
0

私の場合、先生はより良いアプローチをしてくれました。彼らが提供した質問は、私たちの登録番号と関係があります。元:

関数/理論への入力は、学生ごとに異なる登録番号です。

そのため、答えや解決策へのアプローチは生徒ごとに比較的異なります。これにより、すべての生徒が必然的に自分で宿題を行うか、少なくとも自分の登録でアプローチをハックする方法を知る必要があります[itレッスンを学ぶよりも難しいかもしれません;)]。

Hope your lecturer will read this thread before his next tutorial :D
于 2013-04-18T03:36:20.707 に答える