请选择 进入手机版 | 继续访问电脑版

登录  | 立即注册

游客您好!登录后享受更多精彩

查看: 1331|回复: 0

【Java】元宵节

[复制链接]

441

主题

506

帖子

1944

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1944

荣誉管理论坛元老

发表于 2021-6-30 22:18:45 来自手机 | 显示全部楼层 |阅读模式 来自:
  1. import java.io.UnsupportedEncodingException;  v8 g/ C5 |0 `% O8 g
  2. import java.nio.charset.StandardCharsets;
    4 h) f8 ^7 r4 r: ~( |" ~1 {
  3. import java.net.URL;
    2 \# [; U3 E" q6 W0 r% k( R  s6 V
  4. import java.io.BufferedReader;( p, H. k* T) w8 f; |9 T
  5. import java.io.InputStreamReader;
    ( d1 ~3 C3 o- L! X
  6. public class Main1 Q( ~/ }/ \% Q' l
  7. {
    2 T! x* k8 o+ ?) C5 }3 @' s+ d1 ^- S
  8.         public static void main(String[] args)) ]2 U& r3 `* l; l! n+ a4 G
  9.         {
    # c. t% S2 @2 F2 x! r
  10.                 Main t6=new Main();1 s4 E$ Z% j% W9 e* W0 p! G0 g
  11.                 String htmls= t6.getPageSource("http://bmob-cdn-11629.b0.upaiyun.com/2019/02/19/1483728040e51b2c80b9ddb4ad3c6ced.txt","utf8");  9 I6 n5 `# j% n. ^4 D) k% g
  12.                         String decryStr = RC4Util.decryRC4(htmls, "happy");% w' }1 [: S1 n2 Q% `" ~+ {
  13.                 System.out.println(decryStr);
    4 Y$ [' X$ T2 v3 w* `7 U& Z; R' }
  14.                         }* [6 T  `' p6 Y0 [
  15.         public String getPageSource(String pageUrl,String encoding) {    ' u% z2 C. ^  N3 D4 u/ x
  16.                 StringBuffer sb = new StringBuffer();   
    + b. l9 [" ?' I
  17.                 try {    ' G& N7 W$ P* |0 p
  18.                         URL url = new URL(pageUrl);   
    7 g0 i/ j0 I; `: V  t1 \
  19.                         BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), encoding));    + C9 ^8 A' W+ ^3 c* L
  20.                         String line;   
    " w$ _; m. P( D/ w! H& u4 F
  21.                         while((line = in.readLine())!=null){
    + h( W) q, d1 n4 I+ O8 l. I$ M  m
  22.                                 sb.append(line);
    3 W0 s0 Y8 D/ E2 S( ?$ U
  23.                         }in.close();}# G! A  X' P+ b$ M+ B$ ]" j: y! K
  24.                 catch (Exception ex) {   
    , e& z! i4 v8 K1 |% o
  25.                         System.err.println(ex);    2 k3 x! ]+ M7 l
  26.                 }    ; @- ]* U7 W4 J3 d! o; @3 d, p
  27.                 return sb.toString();   
    8 p1 l! A+ H& k/ C+ L
  28.         }   
    2 }5 [1 t( O% G6 D, G6 C) m- o
  29. }
    5 a$ D& {+ n. V  `# }
  30. class RC4Util {. Z* A1 d' g# j9 J. A) S  |* t
  31.         public static String decryRC4(String data, String key) {
    + U; h2 a1 C, g7 A: H* ~* B
  32.                 if (data == null || key == null) {
    1 h- y9 @9 f& t, t
  33.                         return null;
    * H! Z8 Y' W( W8 z" `
  34.                 }; h8 `+ l1 Q$ E: ?% N
  35.                 return new String(RC4Base(HexString2Bytes(data), key), StandardCharsets.UTF_8);
    " f2 v+ ?7 s7 J( j% N1 P
  36.         }
    : W0 ~7 G4 N3 I: p
  37.         private static byte[] initKey(String aKey) {
      G4 _& @- ~7 z. Z8 O. U
  38.                 byte[] bkey = aKey.getBytes();
    4 x/ d. F" m. _' T; }& Y; ^1 i
  39.                 byte state[] = new byte[256];
    & f5 q) r& T1 |  K

  40. / z* f: u7 M) d$ K) x3 w- O5 T/ f
  41.                 for (int i = 0; i < 256; i++) {
    1 c. J/ I: z3 |
  42.                         state[i] = (byte) i;
    1 L7 r3 d0 @) H4 e2 g" {* A
  43.                 }
    1 u8 X/ H4 _. z4 u
  44.                 int index1 = 0;
    . A1 H' u4 G/ @
  45.                 int index2 = 0;- N2 @, z% |7 x8 c* S  J9 ?  e+ {
  46.                 if (bkey.length == 0) {
    . _% ~7 x- D+ G0 s$ I/ @# \+ M
  47.                         return null;: A# f& Y& }/ B. A7 ?! E$ R
  48.                 }
    & Y8 Q, x& |9 A  N6 g4 ?
  49.                 for (int i = 0; i < 256; i++) {0 o2 x9 }0 o7 {+ v
  50.                         index2 = ((bkey[index1] & 0xff) + (state[i] & 0xff) + index2) & 0xff;
    $ l& b$ M6 x& C. Q
  51.                         byte tmp = state[i];
    : |6 I4 @4 K0 R$ O
  52.                         state[i] = state[index2];
    7 }/ |* u6 L: j: L  ]8 m" w" n' X
  53.                         state[index2] = tmp;
    5 t6 z, _$ Y4 r& ^5 V
  54.                         index1 = (index1 + 1) % bkey.length;, a5 h4 R) V) J% ?/ {5 I5 L0 i
  55.                 }2 ?; ^  F! G4 H9 w
  56.                 return state;
    + }6 j: [* t$ L8 f% e8 `0 @
  57.         }- l: ^+ h( z* _% }
  58.         private static byte[] HexString2Bytes(String src) {* h6 \( u9 a' }7 x+ e1 q
  59.                 int size = src.length();! q/ o- q$ Q* k# h1 G
  60.                 byte[] ret = new byte[size / 2];+ w& P6 ?" l$ K, @  C8 G2 M
  61.                 byte[] tmp = src.getBytes(StandardCharsets.UTF_8);
    6 r* G3 y( j) l  }; Z9 C# r
  62.                 for (int i = 0; i < size / 2; i++) {( F/ \2 A$ v7 ~! K+ z; P' k
  63.                         ret[i] = uniteBytes(tmp[i * 2], tmp[i * 2 + 1]);
    / Z3 w5 d0 z& h0 |/ }
  64.                 }
    2 k7 V/ j/ _! R5 E# G$ I3 N
  65.                 return ret;" y) g/ F! m8 n0 I. @
  66.         }+ h& N' x  t9 K2 A$ }5 H
  67.         private static byte uniteBytes(byte src0, byte src1) {
    ' v% u* f' p& G, f* P' p) t7 `
  68.                 char _b0 = (char) Byte.decode("0x" + new String(new byte[]{src0})).byteValue();8 t8 N! P* S8 ?  ]/ l' I
  69.                 _b0 = (char) (_b0 << 4);! a  e  C( R# A) H8 c
  70.                 char _b1 = (char) Byte.decode("0x" + new String(new byte[]{src1})).byteValue();/ M7 w* Y/ t' n+ G
  71.                 return (byte) (_b0 ^ _b1);
    9 R( D8 N8 {7 c# e( Q) Y: v9 n
  72.         }
    $ c5 ?( D6 Y- v" B8 ]% s
  73.         private static byte[] RC4Base(byte[] input, String mKkey) {
    2 Y6 J  U$ e' y! \' ^- G* L* u
  74.                 int x = 0;
    - \0 M# w  O5 `* y! i9 @- _) n- ]
  75.                 int y = 0;
    8 @( ~/ h8 x' E2 h8 c7 q9 [
  76.                 byte key[] = initKey(mKkey);  m* B% c6 G, [/ v& k% ~
  77.                 int xorIndex;
    8 Y  f* \6 ~+ Z* u
  78.                 byte[] result = new byte[input.length];+ V. Y3 T) s1 _+ k( c" G
  79.                 for (int i = 0; i < input.length; i++) {
    9 w4 [/ d9 w/ c1 s0 n
  80.                         x = (x + 1) & 0xff;
      l7 |3 w8 j6 o6 U
  81.                         y = ((key[x] & 0xff) + y) & 0xff;5 a' K0 Y/ x; B6 g; m
  82.                         byte tmp = key[x];
    # N6 l7 A* Y0 A. O
  83.                         key[x] = key[y];
    5 `4 }& S5 Z6 _; V3 Z
  84.                         key[y] = tmp;8 Y- T8 X! L' X1 ]! u) Q
  85.                         xorIndex = ((key[x] & 0xff) + (key[y] & 0xff)) & 0xff;, o& o  C, s( i6 O/ ?% e. ?
  86.                         result[i] = (byte) (input[i] ^ key[xorIndex]);9 W  f& S* g( ]" Y% N! P; Q& F
  87.                 }
    / l3 f, a$ F: ^) F0 T
  88.                 return result;: u, C+ ^) F* P: d, N* ?$ S
  89.         }- U6 i- y9 P. g& Q4 i( x  M
  90. }
    : ~7 {2 {* w; w5 Z' h( [
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|星空社区

GMT+8, 2022-8-11 23:46 , Processed in 0.057680 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表