首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

簡單高效的文本加密解密工具類:基於字符偏移算法

     編輯:Java 相關知識

核心思路

對每個字符進行定值偏移(EXP = 1235),加密時 char + EXP,解密時 char - EXP。屬於對稱加密,適合簡單配置文件、游戲數據文件的輕量級混淆。

完整實現代碼

public class DoChar {
    private static final int EXP = 1235; // 偏移量,可配置化
    
    public static void main(String[] args) {
        DoChar doChar = new DoChar();
        String str = "這是測試內容: abcd 123456 =-+";
        System.out.println("原內容:" + str);
        
        String encrypted = doChar.encrypt(str);
        System.out.println("加密後:" + encrypted);
        
        String decrypted = doChar.reencrypt(encrypted);
        System.out.println("解密後:" + decrypted);
    }
    
    // 加密
    public String encrypt(String str) {
        StringBuffer buf = new StringBuffer();
        char[] cs = str.toCharArray(); // 大字符串比 charAt() 效率高
        for (int i = 0; i < cs.length; i++) {
            char a = (char) ((int) cs[i] + EXP);
            buf.append(a);
        }
        return buf.toString();
    }
    
    // 解密
    public String reencrypt(String str) {
        StringBuffer buf = new StringBuffer();
        char[] cs = str.toCharArray();
        for (int i = 0; i < cs.length; i++) {
            char a = (char) ((int) cs[i] - EXP);
            buf.append(a);
        }
        return buf.toString();
    }
}

運行結果

原內容:這是測試內容: abcd 123456 =-+
加密後:钬欂爞邨噘悌???????????????????
解密後:這是測試內容: abcd 123456 =-+

關鍵優化點

  • toCharArray() vs charAt():大字符串轉字符數組一次性訪問,避免 charAt() 重複邊界檢查與方法調用開銷
  • StringBuffer:線程安全但單線程下足夠,或用 StringBuilder 更快
  • 偏移量選擇:避免導致字符超出 Unicode 範圍(0~65535),建議 EXP < 65535 - 最大字符碼點

安全性提醒

⚠️ 此算法極不安全,僅適合:

  • 防止誤編輯的配置文件輕度混淆
  • 單機游戲存檔防作弊(門檻極低)
  • 教學演示對稱加密原理

生產環境敏感數據必須使用成熟加密庫:AES-GCM、ChaCha20-Poly1305、RSA-OAEP 等,並妥善管理金鑰。

擴展方向

  • 支持字節數組加密(byte[]),處理二進制文件
  • 引入隨機 IV(初始化向量),相同明文產生不同密文
  • 結合 PBKDF2 從密碼派生金鑰,替代固定 EXP
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved