Tôi đã đọc các chủ đề sau và chúng đã giúp một chút, nhưng tôi đang tìm thêm một chút thông tin.Cách triển khai mã hóa AES Java 256 bit với CBC
Về cơ bản, những gì tôi đang làm là viết một chương trình sẽ mã hóa một yêu cầu được gửi qua giao thức TCP/IP, và sau đó giải mã bởi một chương trình máy chủ. Mã hóa sẽ cần phải là AES, và làm một số nghiên cứu tôi phát hiện ra tôi cần phải sử dụng CBC và PKCS5Padding. Vì vậy, về cơ bản tôi cần một khóa bí mật và một IV là tốt.
Ứng dụng tôi đang phát triển là dành cho điện thoại, vì vậy tôi muốn sử dụng các gói bảo mật java để giảm kích thước. Tôi đã hoàn thành thiết kế, nhưng không chắc chắn về việc triển khai IV và khóa chia sẻ.
Dưới đây là một số mã:
// My user name
byte[] loginId = "login".getBytes();
byte[] preSharedKey128 = "ACME-1234AC".getBytes();
byte[] preSharedKey192 = "ACME-1234ACME-1234A".getBytes();
// 256 bit key
byte[] preSharedKey256 = "ACME-1234ACME-1234ACME-1234".getBytes();
byte[] preSharedKey = preSharedKey256;
// Initialization Vector
// Required for CBC
byte[] iv ={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
IvParameterSpec ips = new IvParameterSpec(iv);
byte[] encodedKey = new byte[loginId.length + preSharedKey.length];
System.arraycopy(loginId, 0, encodedKey, 0, loginId.length);
System.arraycopy(preSharedKey, 0, encodedKey, loginId.length, preSharedKey.length);
// The SecretKeySpec provides a mechanism for application-specific generation
// of cryptography keys for consumption by the Java Crypto classes.
// Create a key specification first, based on our key input.
SecretKey aesKey = new SecretKeySpec(encodedKey, "AES");
// Create a Cipher for encrypting the data using the key we created.
Cipher encryptCipher;
encryptCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
// Initialize the Cipher with key and parameters
encryptCipher.init(Cipher.ENCRYPT_MODE, aesKey, ips);
// Our cleartext
String clearString = "33,8244000,9999,411,5012022517,0.00,0,1,V330";
byte[] cleartext = clearString.getBytes();
// Encrypt the cleartext
byte[] ciphertext = encryptCipher.doFinal(cleartext);
// Now decrypt back again...
// Decryption cipher
Cipher decryptCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
// Initialize PBE Cipher with key and parameters
decryptCipher.init(Cipher.DECRYPT_MODE, aesKey, ips);
// Decrypt the cleartext
byte[] deciphertext = decryptCipher.doFinal(ciphertext);
Tóm lại những gì nó nên làm là mã hóa một số thông điệp rằng có thể giải mã bởi các máy chủ mà không có máy chủ cần phải có được một chìa khóa hoặc IV từ điện thoại. Có cách nào tôi có thể làm điều này, nơi tôi có thể an toàn IV và chìa khóa trên điện thoại, và vẫn còn có chìa khóa và IV được biết đến bởi máy chủ là tốt? Cảm thấy tự do để nói với tôi để làm cho mọi thứ rõ ràng hơn nếu họ không.
Khóa và mật mã được mã hóa ở đây chỉ dành cho sự hiểu biết của tôi. Tôi không biết nhiều về mã hóa nên tôi về cơ bản ở chế độ biên dịch và chạy. – Stevus
Mô hình mối đe dọa của bạn là gì? Ý tôi là, nếu bạn đang nghĩ rằng mã hóa là cần thiết, bạn phải có một số ý tưởng về những người muốn thông tin này và tại sao, bao nhiêu họ nhận được nó sẽ làm tổn thương bạn, lợi ích cho họ, vv – erickson
Tôi đoán mô hình mối đe dọa của tôi là chúng tôi có thông tin tài khoản/thông tin đăng nhập cần thiết để thực hiện giao dịch ngân hàng và chúng tôi không muốn bị lộ. Đó là những gì bạn đang tìm kiếm? – Stevus