可用于URL传入汉字作为参数时,发生乱码的情况
import java.io.UnsupportedEncodingException;
public class Encode {
public static final String ALLOWED_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.!~*'()";
public static String encode(String str){
String enstr="";
String ling="0000";
char[] data=str.toCharArray();
for (int i = 0; i < data.length; i++) {
String unicode=Integer.toHexString(data[i]);
enstr+=ling.substring(0, 4-unicode.length())+Integer.toHexString(data[i]);
}
return enstr;
}
public static String decode(String str){
byte[] baKeyword = new byte[str.length()/2];
for(int i = 0; i < baKeyword.length; i++)
{
try{
baKeyword[i] = (byte)(0xff & Integer.parseInt(str.substring(i*2, i*2+2),16));
}catch(Exception e){
e.printStackTrace();
}
}
try {
str = new String(baKeyword, "utf-16");//UTF-16le:Not
} catch (Exception e1) {
e1.printStackTrace();
}
return str;
}
public static String detialEncode(String sql){
return sql.replaceAll("'", ":").replaceAll(" ", " ").replaceAll("%", "@");
}
public static String detialDecode(String sql){
return sql.replaceAll(":", "'").replaceAll("@","%");
}
////实现js encodeURI 效果
public static String encodeURI(String input) {
if (input == null || "".equals(input)) {
return input;
}
int l = input.length();
StringBuilder o = new StringBuilder(l * 3);
try {
for (int i = 0; i < l; i++) {
String e = input.substring(i, i + 1);
if (ALLOWED_CHARS.indexOf(e) == -1) {
byte[] b = e.getBytes("utf-8");
o.append(getHex(b));
continue;
}
o.append(e);
}
return o.toString();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return input;
}
private static String getHex(byte buf[]) {
StringBuilder o = new StringBuilder(buf.length * 3);
for (int i = 0; i < buf.length; i++) {
int n = (int) buf[i] & 0xff;
o.append("%");
if (n < 0x10) {
o.append("0");
}
o.append(Long.toString(n, 16).toUpperCase());
}
return o.toString();
}
public static String dencodeURI(String encodedURI) {
char actualChar;
StringBuffer buffer = new StringBuffer();
int bytePattern, sumb = 0;
for (int i = 0, more = -1; i < encodedURI.length(); i++) {
actualChar = encodedURI.charAt(i);
switch (actualChar) {
case '%': {
actualChar = encodedURI.charAt(++i);
int hb = (Character.isDigit(actualChar) ? actualChar - '0'
: 10 + Character.toLowerCase(actualChar) - 'a') & 0xF;
actualChar = encodedURI.charAt(++i);
int lb = (Character.isDigit(actualChar) ? actualChar - '0'
: 10 + Character.toLowerCase(actualChar) - 'a') & 0xF;
bytePattern = (hb << 4) | lb;
break;
}
case '+': {
bytePattern = ' ';
break;
}
default: {
bytePattern = actualChar;
}
}
if ((bytePattern & 0xc0) == 0x80) { // 10xxxxxx
sumb = (sumb << 6) | (bytePattern & 0x3f);
if (--more == 0)
buffer.append((char) sumb);
} else if ((bytePattern & 0x80) == 0x00) { // 0xxxxxxx
buffer.append((char) bytePattern);
} else if ((bytePattern & 0xe0) == 0xc0) { // 110xxxxx
sumb = bytePattern & 0x1f;
more = 1;
} else if ((bytePattern & 0xf0) == 0xe0) { // 1110xxxx
sumb = bytePattern & 0x0f;
more = 2;
} else if ((bytePattern & 0xf8) == 0xf0) { // 11110xxx
sumb = bytePattern & 0x07;
more = 3;
} else if ((bytePattern & 0xfc) == 0xf8) { // 111110xx
sumb = bytePattern & 0x03;
more = 4;
} else { // 1111110x
sumb = bytePattern & 0x01;
more = 5;
}
}
return buffer.toString();
}
}
分享到:
相关推荐
总的来说,这个Java加密解密示例提供了一个实际应用加密技术的起点,对于理解和实践Java安全编程有着积极的作用。通过学习和研究这个示例,开发者能够更好地理解如何在实际项目中保护敏感数据的安全。
Java 中的 3DES 加密解密示例(封装 byte 数组和 16 进制字符串互转) 在 Java 中,3DES 加密是一种常用的加密算法,它可以将明文数据转换为密文数据,以保护数据的安全性。在本示例中,我们将展示如何使用 3DES ...
Java实现的RSA加密解密算法示例 本文主要介绍了Java实现的RSA加密解密算法,结合实例形式分析了Java RSA加密解密算法的相关实现技巧。 知识点1:RSA加密解密算法简介 RSA加密解密算法是一种非对称加密算法,由Ron...
以下是一个简单的AES加密解密示例: ```java import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import java.security.SecureRandom; public class AESEncryptDemo ...
本实例将聚焦于JAVA数据加密解密的实践应用。 首先,让我们理解加密和解密的基本概念。加密是一种将明文(可读信息)转化为密文(不可读信息)的过程,以保护数据不被未经授权的用户访问。解密则是加密的逆过程,将...
"java实现的RC4加密解密算法示例" RC4加密解密算法是Symmetric-key block cipher的一种,使用同一个密钥进行加密和解密。java实现的RC4加密解密算法可以通过以下步骤实现: 1. 初始化数组:创建一个大小为256的...
以上代码示例展示了如何在Java中实现ZIP压缩包的加密和解密。需要注意的是,加密后的ZIP文件需要保存密码以供解密时使用。此外,加密的强度取决于所选的加密算法和密码的复杂性。在实际应用中,应确保密码的安全存储...
国产加密算法SM2加密解密java代码完整示例。里面有加密解密的示例,生成秘钥的示例,本人亲测有效。默认maven环境编译。若无maven环境,里面也上传了相关依赖jar包。
在实际应用部分,书中的源代码部分(Java加密与解密的艺术--源代码.rar)提供了详细的示例,覆盖了SSL/TLS协议的实现,网络通信的安全,以及PBE(Password-Based Encryption)和PKCS#7等标准的使用。这些代码实例...
"java实现文件加密解密" Java 实现文件的加密与解密是指利用 Java 语言将资源文件(包括图片、动画等类型)进行简单的加密和解密。这种策略的原因和好处是将准备好的资源存储在云上,使用时通过网络进行读取即可,...
在本文示例中,我们关注的是如何利用Java的Hex编码和解码来处理AES加密和解密的过程。 首先,让我们了解什么是Hex编码。Hex编码是一种将二进制数据转换为可打印字符的表示方式,每个字节被转换为两个十六进制数字...
RSA加密解密示例工程是一个专门针对Android平台设计的学习资源,旨在帮助开发者深入理解并实践RSA加密算法。RSA,全称Rivest-Shamir-Adleman,是一种非对称加密技术,广泛应用于网络安全、数据保护等领域。该示例...
描述中提到的“博文链接”指向了ITEYE博客上的一篇文章,虽然具体内容未提供,但我们可以推断文章可能涉及了Java加密解密的实际应用、代码示例以及可能遇到的问题和解决方案。 标签"源码"暗示我们可能会看到一些...
以下是一个简单的RSA加密解密示例: ```java import java.security.*; import javax.crypto.Cipher; public class RSAExample { public static KeyPair generateKeyPair() throws NoSuchAlgorithmException { ...
Java和JavaScript之间的DES加密解密是信息安全领域中的一个重要话题,主要涉及到数据的保护和通信的安全。DES(Data Encryption Standard)是一种古老的对称加密算法,尽管它在安全性上已不被视为最佳选择,但在某些...
若要构建安全坚固的Java企业级应用,不仅要深入了解每种算法的原理并将它们综合运用,而且还要悟透Java加密与解密技术的本质。全书包含3个部分,基础篇对Java企业级应用的安全知识、密码学核心知识、与Java加密相关...
Java AES256加密解密示例代码 Java AES256加密解密示例代码主要介绍了Java AES256加密解密示例代码,通过示例代码对大家的学习或者工作具有一定的参考学习价值。 什么是 AES 256? 高级加密标准(英语:Advanced ...