📄 skeydictionary.java
字号:
"OWNS", "QUAD", "QUIT", "QUOD", "RACE", "RACK", "RACY", "RAFT", "RAGE", "RAID", "RAIL", "RAIN", "RAKE", "RANK", "RANT", "RARE", "RASH", "RATE", "RAVE", "RAYS", "READ", "REAL", "REAM", "REAR", "RECK", "REED", "REEF", "REEK", "REEL", "REID", "REIN", "RENA", "REND", "RENT", "REST", "RICE", "RICH", "RICK", "RIDE", "RIFT", "RILL", "RIME", "RING", "RINK", "RISE", "RISK", "RITE", "ROAD", "ROAM", "ROAR", "ROBE", "ROCK", "RODE", "ROIL", "ROLL", "ROME", "ROOD", "ROOF", "ROOK", "ROOM", "ROOT", "ROSA", "ROSE", "ROSS", "ROSY", "ROTH", "ROUT", "ROVE", "ROWE", "ROWS", "RUBE", "RUBY", "RUDE", "RUDY", "RUIN", "RULE", "RUNG", "RUNS", "RUNT", "RUSE", "RUSH", "RUSK", "RUSS", "RUST", "RUTH", "SACK", "SAFE", "SAGE", "SAID", "SAIL", "SALE", "SALK", "SALT", "SAME", "SAND", "SANE", "SANG", "SANK", "SARA", "SAUL", "SAVE", "SAYS", "SCAN", "SCAR", "SCAT", "SCOT", "SEAL", "SEAM", "SEAR", "SEAT", "SEED", "SEEK", "SEEM", "SEEN", "SEES", "SELF", "SELL", "SEND", "SENT", "SETS", "SEWN", "SHAG", "SHAM", "SHAW", "SHAY", "SHED", "SHIM", "SHIN", "SHOD", "SHOE", "SHOT", "SHOW", "SHUN", "SHUT", "SICK", "SIDE", "SIFT", "SIGH", "SIGN", "SILK", "SILL", "SILO", "SILT", "SINE", "SING", "SINK", "SIRE", "SITE", "SITS", "SITU", "SKAT", "SKEW", "SKID", "SKIM", "SKIN", "SKIT", "SLAB", "SLAM", "SLAT", "SLAY", "SLED", "SLEW", "SLID", "SLIM", "SLIT", "SLOB", "SLOG", "SLOT", "SLOW", "SLUG", "SLUM", "SLUR", "SMOG", "SMUG", "SNAG", "SNOB", "SNOW", "SNUB", "SNUG", "SOAK", "SOAR", "SOCK", "SODA", "SOFA", "SOFT", "SOIL", "SOLD", "SOME", "SONG", "SOON", "SOOT", "SORE", "SORT", "SOUL", "SOUR", "SOWN", "STAB", "STAG", "STAN", "STAR", "STAY", "STEM", "STEW", "STIR", "STOW", "STUB", "STUN", "SUCH", "SUDS", "SUIT", "SULK", "SUMS", "SUNG", "SUNK", "SURE", "SURF", "SWAB", "SWAG", "SWAM", "SWAN", "SWAT", "SWAY", "SWIM", "SWUM", "TACK", "TACT", "TAIL", "TAKE", "TALE", "TALK", "TALL", "TANK", "TASK", "TATE", "TAUT", "TEAL", "TEAM", "TEAR", "TECH", "TEEM", "TEEN", "TEET", "TELL", "TEND", "TENT", "TERM", "TERN", "TESS", "TEST", "THAN", "THAT", "THEE", "THEM", "THEN", "THEY", "THIN", "THIS", "THUD", "THUG", "TICK", "TIDE", "TIDY", "TIED", "TIER", "TILE", "TILL", "TILT", "TIME", "TINA", "TINE", "TINT", "TINY", "TIRE", "TOAD", "TOGO", "TOIL", "TOLD", "TOLL", "TONE", "TONG", "TONY", "TOOK", "TOOL", "TOOT", "TORE", "TORN", "TOTE", "TOUR", "TOUT", "TOWN", "TRAG", "TRAM", "TRAY", "TREE", "TREK", "TRIG", "TRIM", "TRIO", "TROD", "TROT", "TROY", "TRUE", "TUBA", "TUBE", "TUCK", "TUFT", "TUNA", "TUNE", "TUNG", "TURF", "TURN", "TUSK", "TWIG", "TWIN", "TWIT", "ULAN", "UNIT", "URGE", "USED", "USER", "USES", "UTAH", "VAIL", "VAIN", "VALE", "VARY", "VASE", "VAST", "VEAL", "VEDA", "VEIL", "VEIN", "VEND", "VENT", "VERB", "VERY", "VETO", "VICE", "VIEW", "VINE", "VISE", "VOID", "VOLT", "VOTE", "WACK", "WADE", "WAGE", "WAIL", "WAIT", "WAKE", "WALE", "WALK", "WALL", "WALT", "WAND", "WANE", "WANG", "WANT", "WARD", "WARM", "WARN", "WART", "WASH", "WAST", "WATS", "WATT", "WAVE", "WAVY", "WAYS", "WEAK", "WEAL", "WEAN", "WEAR", "WEED", "WEEK", "WEIR", "WELD", "WELL", "WELT", "WENT", "WERE", "WERT", "WEST", "WHAM", "WHAT", "WHEE", "WHEN", "WHET", "WHOA", "WHOM", "WICK", "WIFE", "WILD", "WILL", "WIND", "WINE", "WING", "WINK", "WINO", "WIRE", "WISE", "WISH", "WITH", "WOLF", "WONT", "WOOD", "WOOL", "WORD", "WORE", "WORK", "WORM", "WORN", "WOVE", "WRIT", "WYNN", "YALE", "YANG", "YANK", "YARD", "YARN", "YAWL", "YAWN", "YEAH", "YEAR", "YELL", "YOGA", "YOKE" }; public static String bitsToEnglish(byte[] bits, int offset) { byte[] bits2 = new byte[9]; int p,i; System.arraycopy(bits, 0, bits2, 0, 8); /* compute parity */ for(p = 0,i = 0; i < 64; i += 2) p += extractBits(bits2, i, 2); bits2[8] = (byte)(p << 6); StringBuffer buf = new StringBuffer(); for(i = 0; i < 66; i += 11) { if(i > 0) { buf.append(" "); } buf.append(dict[extractBits(bits2, i, 11)]); } return buf.toString(); } public static byte[] englishToBits(String english) { StringTokenizer st = new StringTokenizer(english); byte[] bits = new byte[9]; int i, p, v, l, low, high; String word; for(i = 0, p = 0; i < 6; i++, p += 11) { if((word = st.nextToken()) == null) return null; l = word.length(); if(l > 4 || l < 1) { return null; } else if(l < 4) { low = 0; high = 570; } else { low = 571; high = 2047; } // !!! standard(word); if((v = wsrch(word, low, high)) < 0) return null; insertBits(bits, v, p, 11); } /* now check the parity of what we got */ for(p = 0, i = 0; i < 64; i +=2) p += extractBits(bits, i, 2); if((p & 3) != extractBits(bits, 64, 2)) return null; byte[] out = new byte[8]; System.arraycopy(bits, 0, out, 0, 8); return out; } static int extractBits(byte[] bits, int offset, int length) { int l = 0, c = 0, r = 0, x, byteOff = offset / 8; l = (bits[byteOff] & 0xff); if(byteOff + 1 < bits.length) { c = (bits[byteOff + 1] & 0xff); } if(byteOff + 2 < bits.length) { r = (bits[byteOff + 2] & 0xff); } x = ((l << 8 | c) << 8 | r); x = x >>> (24 - (length + (offset % 8))); x = (x & (0xffff >>> (16 - length))); return x; } static void insertBits(byte[] bits, int x, int offset, int length) { int l, c, r, y, shift; shift = ((8 - ((offset + length) & 0x07)) & 0x07); y = x << shift; l = (y >>> 16) & 0xff; c = (y >>> 8) & 0xff; r = y & 0xff; if(shift + length > 16) { bits[offset / 8] |= l; bits[offset / 8 + 1] |= c; bits[offset / 8 + 2] |= r; } else if(shift +length > 8) { bits[offset / 8] |= c; bits[offset / 8 + 1] |= r; } else { bits[offset / 8] |= r; } } /* Dictionary binary search */ private static int wsrch(String word, int low, int high) { int i, j; word = word.toUpperCase(); for(;;) { i = (low + high) / 2; if((j = word.compareTo(dict[i])) == 0) { return i; /* Found it */ } else if(high == low + 1) { /* Avoid effects of integer truncation in /2 */ if(word.equalsIgnoreCase(dict[high])) return high; else return -1; } else if(low >= high) { return -1; } /* I don't *think* this can happen...*/ if(j < 0) high = i; /* Search lower half */ else low = i; /* Search upper half */ } } /* !!! DEBUG public static void main(String[] argv) { String words1 = "RASH BUSH MILK LOOK BAD BRIM"; String words2 = "TROD MUTE TAIL WARM CHAR KONG"; byte[] bits1, bits2; System.out.println("words1: "); bits1 = SKEYDictionary.englishToBits(words1); com.mindbright.util.HexDump.hexDump(bits1); System.out.println("words2: "); bits2 = SKEYDictionary.englishToBits(words2); com.mindbright.util.HexDump.hexDump(bits2); System.out.println(SKEYDictionary.bitsToEnglish(bits1, 0)); System.out.println(SKEYDictionary.bitsToEnglish(bits2, 0)); } */}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -