2012-10-11 44 views
0

我正在爲一個項目實現3Des加密算法。我在Java中爲長數字實現3Des加密算法

我使用此代碼作爲例子:

http://www.java2s.com/Code/Java/Security/TripleDES.htm

它的工作好,但我需要發送和接收字符串,但我正在做這個保存在數據庫信用卡號碼,所以我需要使用長數字而不是字符串。

這樣做有些可能嗎?

我必須使用特殊的鍵或我必須做一些轉換爲返回值? 我正在爲最好,最正確的解決方案而歡呼。

我知道,也許我的問題有點傻,但我迷路了。

謝謝您的回答和對不起我的英文不好

+0

爲什麼不把long轉換爲String? 'String.valueOf(long)' –

+0

是的,但我不知道這是否是最好的,正確的解決方案。也許用一個特殊的鍵,算法會返回一個很長的數字。感謝您的回答,那就是我的「B計劃」 –

+0

您誤導了我們:您實際上沒有執行任何操作。您只是使用標準庫進行加密。 –

回答

2

你需要byte[]加密和長可以生成byte[]

public static byte[] toByteArray(long value)  
{ 
    ByteBuffer bb = ByteBuffer.allocate(8); 
    return bb.putLong(value).array(); 
} 

public long toLong(byte[] bytes) { 
    ByteBuffer buffer = ByteBuffer.allocate(8); 
    buffer.put(bytes); 
    return buffer.getLong(); 
} 

使用此byte[]進行加密和解密。 另請注意,信用卡號碼的使用時間並不長。

+0

是的,也許這是一個解決方案,但我不認爲最好的。無法在密碼類或祕密密鑰上設置某些內容來使用數字並恢復數字。 使用你的想法,如果我有一個16位數的信用卡,我必須申請赦免,我會恢復16字符串。 之後,我必須將字符串轉換爲字節數組。 然後我必須將該字節數組保存在我的數據庫的數字列中。怎麼樣? –

+0

這樣做的唯一「好」方法是將這些字節中的每一個轉換爲3位數字(000,001,002..010..045..256),例如使用Ascii代碼,以及創建一個「怪物」號碼,每3位數字「連接」到另一個號碼。所以我有一個16×3 = 78位! 我不認爲這是最好的方法:( –