`

JAVA加密解密示例

    博客分类:
  • JAVA
阅读更多
可用于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 加密解密 示例

    源代码 博文链接:https://rian.iteye.com/blog/196031

    java加密解密示例分享

    想要创造一个只有自己能看懂的文件吗?那就是对数据加密吧,下面分享一个java的数据加密与解密示例

    java使用Hex编码解码实现Aes加密解密功能示例

    主要介绍了java使用Hex编码解码实现Aes加密解密功能,结合完整实例形式分析了Aes加密解密功能的定义与使用方法,需要的朋友可以参考下

    Java实现的RSA加密解密算法示例

    主要介绍了Java实现的RSA加密解密算法,结合实例形式分析了java RAS加密解密算法的相关实现技巧,需要的朋友可以参考下

    Java中3DES加密解密示例(封装byte数组16进制互转)

    Java中3DES加密解密示例(封装byte数组16进制互转)

    java实现的RC4加密解密算法示例

    主要介绍了java实现的RC4加密解密算法,结合具体实例形式分析了java RC4加密解密算法的实现与使用技巧,需要的朋友可以参考下

    Java加密与解密的艺术.mobi

    若要构建安全坚固的Java企业级应用,不仅要深入了解每种算法的原理并将它们综合运用,而且还要悟透Java加密与解密技术的本质。全书包含3个部分,基础篇对Java企业级应用的安全知识、密码学核心知识、与Java加密相关...

    SM2加密解密java代码完整示例

    国产加密算法SM2加密解密java代码完整示例。里面有加密解密的示例,生成秘钥的示例,本人亲测有效。默认maven环境编译。若无maven环境,里面也上传了相关依赖jar包。

    JAVA加密与解密的艺术--第2版.rar

    全书包含3个部分,基础篇对Java企业级应用的安全知识、密码学核心知识、与Java加密相关的API和通过权限文件加强系统安全方面的知识进行了全面的介绍;实践篇不仅对电子邮件传输算法、消息摘要算法、对称加密算法、非...

    Java加密与解密的艺术配书源代码

    全书包含3个部分,基础篇对Java企业级应用的安全知识、密码学核心知识、与Java加密相关的API和通过权限文件加强系统安全方面的知识进行了全面的介绍;实践篇不仅对电子邮件传输算法、消息摘要算法、对称加密算法、...

    Java加密与解密的艺术

    , 全书包含3个部分,基础篇对Java企业级应用的安全知识、密码学核心知识、与Java加密相关的API和通过权限文件加强系统安全方面的知识进行了全面的介绍;实践篇不仅对电子邮件传输算法、消息摘要算法、对称加密算法、...

    Java加密解密和数字签名完整代码示例

    主要介绍了Java加密解密和数字签名完整代码示例,具有一定参考价值,需要的朋友可以了解下。

    RSA算法JAVA公钥加密,C#私钥解密

    可以直接运行成功的RSA加密解密示例 JAVA端采用公钥加密,服务端C#采用私钥解密。

    Java加密与解密的艺术 第二版(清晰+书签+完整版).pdf

    Java加密与解密的艺术 第二版(清晰+书签+完整版).pdf真正第二版,《Java加密与解密的艺术(第2版)》是Java安全领域公认的标杆之作,被奉为每一位Java开发工程师必读的著作之一。由资深专家撰写,第1版4年来畅销不...

    Java AES256加密解密示例代码

    主要介绍了Java AES256加密解密示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Java AES128加密解密

    Java AES128加密解密 示例源码(AES-ECB-PKCS7Padding)

    sm2加密解密java示例.zip

    sm2加密解密java示例,包含加密。解密、基于bc的包实现的,用maven实现的;

    RAS前端加密,JAVA后端解密。实现加密传送(补充了一个JS)

    实现前端jsencrypt加密,后端用java进行解密,然后用md5进行登录,非对称加密算法实现。包含代码示例代码详解

Global site tag (gtag.js) - Google Analytics