2014-10-30 21 views
5

Tôi đang phát triển một ứng dụng mã hóa Java. Tôi muốn mã hóa một tập tin bằng cách sử dụng các thuật toán đối xứng như AES hoặc DES và lưu trữ secretKey trong cơ sở dữ liệu để giải mã trong tương lai của tệp. Tôi tự hỏi làm thế nào để lưu trữ các đối tượng SecretKey trong một bảng cơ sở dữ liệu. Tôi có nên tuần tự hóa đối tượng chính không? (secretKey là serilaizable.) Làm thế nào để lưu trữ đối tượng serialized trong cơ sở dữ liệu? loại dữ liệu MYSQL nào tôi nên sử dụng?Cách quản lý Khóa bí mật trong java

Một giải pháp khác là lấy byte thô [] của khóa, chuyển đổi nó thành base64 và lưu trữ trong cơ sở dữ liệu. Sau này tôi có thể giải mã khóa base64 thành khóa Raw ban đầu, nhưng vấn đề là chuyển đổi khóa thô thành đối tượng SecretKey.

Mọi trợ giúp sẽ được đánh giá cao.

+1

bạn cần sử dụng 'blob' để lưu trữ các đối tượng và đối tượng phải được tuần tự hóa trước khi lưu trữ trong DB. Xem cái này để có thêm thông tin. http://stackoverflow.com/questions/2747203/want-to-store-object-in-mysql-database – Ali786

+0

những gì sẽ được datatype của khóa bí mật –

+0

Sử dụng String Object để lưu trữ khóa bí mật. – Ali786

Trả lời

3

Có một lớp trong java - 'Trình tạo khóa' - Lớp này cung cấp chức năng của trình tạo khóa bí mật (đối xứng).

Bạn về cơ bản cần phải sử dụng lớp này cho thế hệ khóa bí mật, trong một trong những sau cách:

SecretKey aesKey = KeyGenerator.getInstance("AES").generateKey(); 

Điều này sẽ tạo ra khóa bí mật với chiều dài mặc định cho các thuật toán được thông qua như là tham số, trong ví dụ này nó sẽ tạo khóa bí mật cho 128 bit (mặc định cho AES).

Hoặc sử dụng chức năng sau:

public static SecretKey generateSecretKey() 
{ 
    KeyGenerator keyGener = KeyGenerator.getInstance("AES"); 
    keyGener.init(256) // here you can pass any valid length 
    return keyGener.generateKey(); 
} 

Bạn có thể chuyển đổi các phím bí mật được tạo đến mảng nhân vật, mảng byte hoặc chuỗi và sau đó chúng có thể được lưu trữ với bất kỳ cơ sở dữ liệu, sử dụng như sau:

char[] key = encodeHex(aesKey.getEncoded()); 

hoặc

byte[] key = aesKey.getEncoded(); 

Để cụ thể hơn xem các lớp KeyGenerator: http://docs.oracle.com/javase/7/docs/api/javax/crypto/KeyGenerator.html

Rất vui được trợ giúp.

Cảm ơn, Ankit

+0

Hi Lokesh, nếu câu trả lời là hữu ích thì sử dụng mũi tên hướng lên trên để bỏ phiếu, nếu không, nếu vấn đề của bạn chưa được giải quyết, hãy cho tôi biết vấn đề. – LearnAndHelp

Các vấn đề liên quan