• 判断一个字符串是否被Base64加密


    例如:

    字符串:RGFqaURhbGlfSmlud2FuQ2hpamk=

    首先要知道什么是Base64加密?就是Base64是怎么加密的?

    Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息

    至于Base64是怎么加密的?

    看一个简单的例子:

    转前: s 1 3
    先转成ascii:对应 115 49 51
    2进制: 01110011 00110001 00110011
    6个一组(4组) 011100 110011 000100 110011
    然后才有后面的 011100 110011 000100 110011
    然后计算机是8位8位的存数 6不够,自动就补两个高位0了
    所有有了 高位补0
    科学计算器输入 00011100 00110011 00000100 00110011
    得到 28 51 4 51
    查对下照表 c z E z
     
    总结Base64密文有如下特点:
    * 字符串只可能包含A-Z,a-z,0-9,+,/,=字符 
    * 字符串长度是4的倍数 
    * =只会出现在字符串最后,可能没有或者一个等号或者两个等号
     
    再进一步我们可以通过代码进行判断:
    正则判断
    1 private static boolean isBase64(String str) {
    2 String base64Pattern = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$";
    3 return Pattern.matches(base64Pattern, str);
    4 }

    Java代码判断

     1 private static boolean isBase64(String str) {
     2     if (str == null || str.trm().length() == 0) {
     3         return false;
     4     } else {
     5         if (str.length() % 4 != 0) {
     6             return false;
     7         }
     8 
     9         char[] strChars = str.toCharArray();
    10         for (char c:strChars) {
    11             if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') 
    12                 || c == '+' || c == '/' || c == '=') {
    13                 continue;
    14             } else {
    15                 return false;
    16             }
    17         }
    18         return true;
    19     }
    20 }

    PHP代码判断

    $s = "RGFqaURhbGlfSmlud2FuQ2hpamk=";
     
    if ($s == base64_encode(base64_decode($s))) {
    echo 'yes';
    }else{
    echo 'no';

    希望对大家理解Base64有所帮助。

     
  • 相关阅读:
    flash盖住层的解决办法
    编译Chromium
    关于Ubuntu上的版本依赖问题
    GridBagLayout
    使用JList遇到的奇怪问题
    Swing常用整理
    Swing中改变Table的column大小
    SwingUtilities.invokeLater
    git常用命令
    小马过河(bupt 311)
  • 原文地址:https://www.cnblogs.com/liuzeyu12a/p/9902769.html
Copyright © 2020-2023  润新知