答えて
あなたのリンクにあるように、Keyは暗号化アルゴリズム(RSA、DSA)によって生成されます。 Javaには、が付属しています。KeyFactoryで鍵を生成することができます。私は同じキーを何度も再現したいというあなたの希望によって混乱しています。通常は、キーを1回作成し、エンコードされたフォームを格納します。将来、エンコードされたフォームからキーを再作成することができます。
編集: 私はあなたの問題をより良く理解しています。パブリック/プライベート暗号化の鍵ペアが必要だと思った。ゲームを保存するためには、対称キーが十分です。この "十分に良い"例は、多くのショートカットを必要とすることに注意してください。 対称鍵アルゴリズムは、コードがクライアント上で実行されるとクラックすることがあります。しかし、ゲームでは、99.9%のユーザーがセーブ状態を解読できなくなります。
// I use String.getBytes() as a convenince a lot. I specify the encoding
// to ensure that the result is consistent.
final String utf8 = "utf-8";
String password = "It's a secret! Make sure it's long enough (24 bytes)";
byte[] keyBytes = Arrays.copyOf(password.getBytes(utf8), 24);
SecretKey key = new SecretKeySpec(keyBytes, "DESede");
// Your vector must be 8 bytes long
String vector = "ABCD1234";
IvParameterSpec iv = new IvParameterSpec(vector.getBytes(utf8));
// Make an encrypter
Cipher encrypt = Cipher.getInstance("DESede/CBC/PKCS5Padding");
encrypt.init(Cipher.ENCRYPT_MODE, key, iv);
// Make a decrypter
Cipher decrypt = Cipher.getInstance("DESede/CBC/PKCS5Padding");
decrypt.init(Cipher.DECRYPT_MODE, key, iv);
// Example use
String message = "message";
byte[] messageBytes = message.getBytes(utf8);
byte[] encryptedByted = encrypt.doFinal(messageBytes);
byte[] decryptedBytes = decrypt.doFinal(encryptedByted);
// You can re-run the exmaple to see taht the encrypted bytes are consistent
System.out.println(new String(messageBytes, utf8));
System.out.println(new String(encryptedByted, utf8));
System.out.println(new String(decryptedBytes, utf8));
どうすればそれをエンコードされたフォームに格納し、そのエンコードされたフォームからキーを再作成できますか? – user1231120
ありがとう!これは完璧です! – user1231120
いいえ、それは完璧ではありません。これは、入力文字のUTF-8範囲にキーを制限します。パスワードの最後の部分(24バイト以上)を変更しても、キーを変更することさえありません。文字列をキーとして使用しないでください。 PBKDF2を使用してパスワードからキーに移動します。 IVは、入力文字列をエンコードするUTF-8にも依存します。文字が1バイト以上取れば、メソッドは失敗します。 –
- 1. 時間の経過とともにRunnableクラス属性を変更する
- 2. 時間の経過とともに変化するフィールド値
- 3. 時間の経過とともにスナップショットのWebサイト
- 4. 時間の経過とともにffmpeg -r/fps?
- 5. 時間経過とタイムゾーン
- 6. 時間の経過とともにコードの変化を追跡する
- 7. 時間の経過とともにテーブル内のMySQLで値を変更する
- 8. 経過時間
- 9. 時間の経過とともにC#プロパティをアニメーション化する方法は?
- 10. 時間の経過とともに増加を見つけるクエリ
- 11. C#ThreadPoolアプリケーションのパフォーマンスが時間の経過とともに劣化する
- 12. 時間の経過とともにAS3のゲームパフォーマンスが低下する
- 13. Android Webview時間の経過とともにGIFのヒープが劇的に増加
- 14. 実際のロード時間とは異なるJProfiler経過時間
- 15. 時間の経過とともにCPU使用率が増加する
- 16. 非一貫性のあるcsvファイルからのデータベース生成
- 17. ニューラルネットワークは、時間の経過とともに学習率と勢いを変える価値がある
- 18. mclapplyユーザーの時間が経過時間よりも大きい
- 19. Java - 時間の経過とともに応答時間が増加するのはなぜですか?
- 20. 私は時間の経過とともに単純なインクリメントが必要です
- 21. C#タイマーの経過時間?
- 22. C#リスト間の一貫性
- 23. は、経過時間に
- 24. iPhone - NSDateComponents/NSCalendarと経過時間、私は、次の経過時間ユーザに表示したい
- 25. Python辞書のキー値の一貫性
- 26. 最終的に一貫性のあるmnesiaデータベースとerlang。誰でもベストプラクティス?
- 27. 時間の経過とともに変数を追跡するようにMySQLテーブルを設定するには?
- 28. Iphone SDK - 経過時間の経過後に通話中にサウンドを再生するには?
- 29. atmel studioで時計の状態が時間の経過とともに変化していますか?
- 30. 時間の経過とともにマップ上のユーザーを視覚化するためのライブラリー
あなたがにリンクされドキュメントが古いです:http://docs.oracle.com/javase/7/docs/api/java/security/Key.htmlまた、Javaのチュートリアルは、鍵生成のまともな説明を持っていますデジタル署名:http://docs.oracle.com/javase/tutorial/security/apisign/step2.html –
何が必要ですか?私は、キー生成の背後にあるアイデアは正反対です:ジェネレータが同じキーを2回生成してはならないからです。多分あなたは間違った問題を解決しようとしていますか? –
キーを受け取るCypherクラスを使用して、ゲーム用の保存ファイルを暗号化しようとしています。データを暗号化してファイルに保存する必要があります。ユーザーがゲームを再開すると、そのファイルを(同じキーを使用して)復号化する必要があります。 – user1231120