Goで通常のWeb向けに開発する場合、同様の状況に悩まされます。 コードを非常に頻繁に更新する必要があるのはgobotであり、これは開発スタイルに関連しており、自由時間に喜びをもたらしています。 新しいパッケージの開発により、Goで記述されたコードの更新がより簡単かつ迅速になりました。
次に、パッケージの使用方法と動作を説明します。
go get github.com/CossackPyra/updater
Goにアップデータをインストールしたこのコマンドで、次のコマンドを使用してコマンドラインにツールをインストールすることもできます。
go get github.com/CossackPyra/updater/pyra-poster
更新機能を備えたWebサービスの例を次に示します。
package main import ( "fmt" "io" "net/http" "os" "github.com/CossackPyra/updater" ) func main() { http.HandleFunc("/", handle_def) os.Mkdir("tmp", 0700) u1 := updater.UpdaterServer("tmp", []byte("1234567890123456"), os.Args[0]) http.Handle("/updater-me", u1) http.ListenAndServe(":9999", nil) } func handle_def(w http.ResponseWriter, r *http.Request) { fmt.Println("def ", r.Method) io.WriteString(w, "v 24\n") io.WriteString(w, r.URL.Path) println(r.URL.Path) }
プログラムを更新する機能を追加するのは、次の3行です。
"github.com/CossackPyra/updater" ... u1 := updater.UpdaterServer("tmp", []byte("1234567890123456"), os.Args[0]) http.Handle("/updater-me", u1)
この場合、すべてが16バイトのキー[]バイト( "1234567890123456")で暗号化され、 31323334353637383930313233343536はその16進表現です。 new-serviceは新しい実行可能ファイルで、これは古いプロセスを更新するコマンドです。
pyra-poster 31323334353637383930313233343536 new-service http://127.0.0.1:9999/updater-me
どのように機能しますか?
すべてのコードは280行に収まります。 コードに自信があり、すぐに理解できます。 私は自分の暗号化アルゴリズムの暗号強度と、そのようなことをどのように確認できるかについて完全には確信が持てないので、あなたと議論することに興味があります。
updater.UpdaterServerでハンドラーを初期化すると、16バイトのランダムシーケンスが生成されます(rand1)。 コードを更新するには、ハンドラーに対して2つのリクエストを行う必要があります。 最初のGET要求は、これらのランダムな16バイト(rand1) を受け取ります。 ランダムな16バイト(rand1)とシークレットパスワード(key1)を使用して、送信された実行可能ファイルをAESアルゴリズムで暗号化し、POSTメソッドを使用して暗号プログラムを送信します 。
まず、次のレシピに従ってバッファにデータが入力されます。
-ランダムな20バイト(これはrand1ではなく、rand0-現時点ではまったく使用されていません)。
-20バイト-sha1実行可能ファイルのハッシュ。
-「pyra-poster」-バイトのシーケンス、プロトコルの名前。
-6バイト(1-int16リトルエンディアン、0-int32リトルエンディアン)-プロトコルバージョン。
- 実行可能ファイル自体。
このガンマ関数は、 AES ブロック暗号 (key1、rand1)によって取得された xorメソッドを使用して、このバッファーにスーパーインポーズされます。 結果は、POSTメソッドを使用してハンドラーに送信される暗号文です。
復号化用のサーバーでは、AES色域(key1、rand1)がシーケンスにスーパーインポーズされ、「pyra-poster」(1,0)ヘッダーがチェックされ、実行可能ファイルが一時フォルダーに保存され、ハッシュがsha1アルゴリズムを使用して計算され、ヘッダーのsha1と比較されます。 ハッシュが等しい場合、これがサービスの所有者によって作成された本物のファイルであると高い確率で仮定できます。
rand1サービスの更新後、サービスは変更されるため、暗号文を傍受したため、再ロードできません。 key1を計算し、rand1を持ち、ヘッダー「pyra-poster」(1,0)の特性を知ることも、実行可能ファイルを持つことも非常に困難です。
16バイト(128ビット)のkey1は、コードを追加変更することなく32バイト(256ビット)に置き換えることができます。 ほとんどのWebブラウザは、AES 256ビット暗号化を使用しています。
健康に使用してください。