البيانات المشفرة في 128 ، يمكنك تخصيص جدول الرموز واستخدام الرموز المفضلة لديك للتشفير
نسخة الكود كما يلي:
حزمة com.wmly.enc ؛
استيراد java.util.hashmap ؛
/**
* تشفير 128 بت وفك التشفير ، يمكن أن يمثل رمز واحد 7 بتات
* يمكنك تخصيص جدول الرمز ، ولكن لا يمكن تكرار الرمز
*/
الطبقة العامة myBase128 {
شار نهائي ثابت عام [] symbortable = new char [128] ؛
HASHMAP النهائي الثابت العام <الحرف ، integer> indexTable = new HashMap <> (128) ؛
ثابت {
int i = 0 ؛
لـ (int j = 0 ؛ j <128 ؛ j ++) {
// symbortable [j] = (char) j ؛
إذا ('a' <= j && j <= 'z'
||.
||.
Symbortable [i ++] = (char) j ؛
}
}
لـ (char c: "هذا كتبه الشعب الصيني [bie si yao aifa] برنامج الترميز وله جدول رمز مخصص فريد | ولكن يمكن للقطعة أن تستخدم كلمات مكررة ، العرق (لا يزال 12 معرفة*. #). لنا يا عزيزي! "
Symbortable [i ++] = c ؛
}
checktable () ؛
لـ (int j = 0 ؛ j <128 ؛ j ++) {
indextable.put (symbortable [j] ، j) ؛
}
}
kertable {private static void checktable () error {
if (symbortable [127] == 0) {
رمي خطأ جديد ("طول جدول الرمز غير صحيح!") ؛
}
لـ (char a: symbortable) {
عدد int = 0 ؛
لـ (char b: symbortable) {
إذا (a == b) {
count ++ ؛
}
}
if (count> 2) {
رمي خطأ جديد ("جدول الرمز يكرر الرموز!") ؛
}
}
}
تشفير السلسلة العامة (بيانات بايت []) {
if (data == null || data.length == 0) {
إرجاع سلسلة جديدة () ؛
}
StringBuilder نتيجة = new StringBuilder () ؛
int tail = 0 ؛
لـ (int i = 0 ؛ i <data.length ؛ i ++) {
int mov = (i ٪ 7 + 1) ؛
int curr = 0xff & data [i] ؛
رمز int = tail + (curr >> mov) ؛
النتيجة.
tail = (0xff & (curr << (8 - mov))) >> 1 ؛
if (mov == 7) {
النتيجة.
ذيل = 0 ؛
}
}
النتيجة.
return return.toString () ؛
}
البايت العام [] Decode (String Base128) {
if (base128 == null || base128.length () == 0) {
إرجاع BYTE NEW [] {} ؛
}
طول int = (int) math.floor (base128.length () * 0.875) ؛
Byte [] النتيجة = بايت جديد [طول] ؛
int idx = 0 ؛
int head = indexTable.get (base128. Charat (0)) << 1 ؛
لـ (int i = 1 ؛ i <base128.length () ؛) {
int mod = i ٪ 8 ؛
رمز int = indexTable.get (base128.charat (i ++)) ؛
النتيجة [idx ++] = (byte) (0xff & (Head+(Code >> (7 - mod)))) ؛
if (mod == 7) {
Head = 0xff & (indextable.get (base128. Charat (i ++)) << 1) ؛
} آخر {
Head = 0xff & (Code << (mod + 1)) ؛
}
}
نتيجة العودة
}
////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////// /////////////////////
الفراغ الثابت العام الرئيسي (سلسلة [] args) {
MyBase128 BASE128 = جديد myBase128 () ؛
اختبار (BASE128) ؛
String txt = "هذا هو اختبار التشفير وفك التشفير" ؛
String enc = base128.encode (txt.getBytes ()) ؛
system.out.println (enc) ؛
System.out.println ("------------------") ؛
System.out.println (سلسلة جديدة (base128.decode (enc))) ؛
}
اختبار الفراغ الثابت الخاص (MyBase128 BASE128) {
لـ (int i = 0 ؛ i <10000 ؛ i ++) {
سلسلة r = randomdata () ؛
String d = New String (BASE128.Decode (BASE128.ENCODE (R.GETBYTES ())))) ؛
if (! r.equals (d)) {
// d = new string (base128.decode (base128.encode (R.GetBytes ())))) ؛
System.out.println ("Encryption فشل!:" + r) ؛
}
}
}
سلسلة ساكنة خاصة عشوائية dlanddata () {
String TextString = "لقد سئمت من صانع القهوة وأرتدي شعر مستعار/n/r-" ؛
int start = عشوائي (0 ، textstring.length () - 3) ؛
int end = random (start + 1 ، textstring.length () - 1) ؛
إرجاع textstring.substring (ابدأ ، نهاية) ؛
}
static static int random (int i ، int j) {
return (int) math.ceil (math.random ()*(ji)+i) ؛
}
}