一般服务器端会进行Base64处理下,所以客户端也要先Base64解密后,再使用RC4解密。
如:服务器端先RC4加密,然后对其加密后的byte[]做Base64加密处理,所以客户端就需要先Base64解密,然后RC4解密,顺序不可颠倒。
RC4加解密方法引用其他博客。
public class RC4Encrypt { private final byte[] S = new byte[256]; private final byte[] T = new byte[256]; private final int keylen; public RC4Encrypt(final byte[] key) { if (key.length < 1 || key.length > 256) { throw new IllegalArgumentException( "key must be between 1 and 256 bytes"); } else { keylen = key.length; for (int i = 0; i < 256; i++) { S[i] = (byte) i; T[i] = key[i % keylen]; } int j = 0; byte tmp; for (int i = 0; i < 256; i++) { j = (j + S[i] + T[i]) & 0xFF; tmp = S[j]; S[j] = S[i]; S[i] = tmp; } } } public byte[] encrypt(final byte[] plaintext) { final byte[] ciphertext = new byte[plaintext.length]; int i = 0, j = 0, k, t; byte tmp; for (int counter = 0; counter < plaintext.length; counter++) { i = (i + 1) & 0xFF; j = (j + S[i]) & 0xFF; tmp = S[j]; S[j] = S[i]; S[i] = tmp; t = (S[i] + S[j]) & 0xFF; k = S[t]; ciphertext[counter] = (byte) (plaintext[counter] ^ k); } return ciphertext; } public byte[] decrypt(final byte[] ciphertext) { return encrypt(ciphertext); } }
文章来源: RC4 加密解密