简述web安全中加密解密算法

前言:在渗透测试中,常见的密码等敏感信息会采用加密处理,其中作为安全测试人员必须要了解常见的加密方式,才能为后续的安全测试做好准备,本篇文章讲解各种加密编码等知识的基本了解,便于后期的学习和发展。

常见加密编码等算法解析

MD5,SHA,ASC,进制,时间戳,URL,BASE64,Unescape,AES,DES 等

拿出来几个简单说一下是什么

1.比如MD5:最常见,最简单的一个加密方式。MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。

时间戳:

2、时间戳

在线转换工具:时间戳(Unix timestamp)转换工具 - 在线工具

时间戳通常是用在用户的注册、登录、注销等情况

3、base64编码的特点

随着编码的文本增加而增加、由大小写和数字组成且字符结尾一般有两个等号,一般在代码中为了安全会使用base64进行编码

Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。

Base64由于以上优点被广泛应用于计算机的各个领域,然而由于输出内容中包括两个以上“符号类”字符(+, /, =),不同的应用场景又分别研制了Base64的各种“变种”。为统一和规范化Base64的输出,Base62x被视为无符号化的改进版本。

4、URL编码

详细了解可以点击链接

https://www.cnblogs.com/cxygg/p/9278542.html

序号

特殊字符

含义

十六进制值

1.

+

URL 中+号表示空格

%2B

2.

空格

URL中的空格可以用+号或者编码

%20

3.

/

分隔目录和子目录

%2F

4.

?

分隔实际的 URL 和参数

%3F

5.

%

指定特殊字符

%25

6.

#

表示书签

%23

7.

&

URL 中指定的参数间的分隔符

%26

8.

=

URL 中指定参数的值

%3D

5、unescape编码

和URL编码有点像

特点:一般是%U+四个数字对应着两个字符、主要运用于网站web应用

5、AES加密

aes加密后的信息和base64一样,因为其加密可以以base64输出,那么我们在解密base64解不出来是乱码的时候或者解密出来不知道是什么东西的时候就得想想了。

想要解密AES必须要有密码和偏移量,位数和格式,不然神仙也解不出来,那么这时候就看信息收集的能力了。最简单的自然是去网站开发公司的地方问问加密代码是什么在顺便看一眼密码和偏移量,位数和格式,然后自然就搞定了。哈哈哈,你要是真信了,那当我没说。

aes在逐渐的取代md5值、在解密的过程中一定要知道密码和偏移量不然是借不出来的。

在线工具:在线AES加密解密、AES在线加密解密、AES encryption and decryption--查错网

6.对于自定义的加密方式

有些公司不是直接进行某种加密而是采用了自定义加密的方式,那么我们必须知道加密的代码,才可能做到解密,说白了就是要有代码去分析。这时候就得看信息收集能力了。

举个例子:比如我们想对一个网站进行sql注入,也就是在url后边请求的时候带个1and 1=1之类的语句,不用了解为啥,因为我也不知道。反正sql注入就这个意思吧。但是有的url后边不是明文,是经过加密的,比如下便这个网址,后边应该就是加密的。那我们要想实现sql注入,那肯定不能像是给没加密过的url那样单纯的在后边加语句。https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=68018901_2_oem_dg&wd=BASE64&oq=MD5&rsv_pq=d7d23900000e6b7d&rsv_t=fe821WXXuvVqQlRQio0EcitYLbng5FAqDkfBN4Gbri%2FWfwfG6iURpN6%2BJGoTZLqDLzD2aDt4WrI&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_n=2&rsv_sug3=1&bs=MD5https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=68018901_2_oem_dg&wd=BASE64&oq=MD5&rsv_pq=d7d23900000e6b7d&rsv_t=fe821WXXuvVqQlRQio0EcitYLbng5FAqDkfBN4Gbri%2FWfwfG6iURpN6%2BJGoTZLqDLzD2aDt4WrI&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_n=2&rsv_sug3=1&bs=MD5

 必须要解密后边的加密后的信息,之后在给加上我们要的语句,最后在把加上我们语句的信息和原来的方式一样加密,再传回去才可以。那么想知道为啥的看下边:

因为他的信息是加密过的如果我们直接加语句那就是密文+明文,这个信息在我们这里发过去之后,对方服务端会进行解密,它不可能用加密的信息吧。那这个信息是密文的时候自然可以正确解开,但是变成密文+明文解密肯定出问题。所以需要先解密成明文,然后明文+我们要加上的明文语句,这样就是明文+明文,在进行加密,就变成了密文,发过去服务端在解密就是我们的明文+明文语句,欧克那就搞定了。

总结以下:

常见加密形式算法解析

直接加密,带 salt,带密码,带偏移,带位数,带模式,带干扰,自定义组合等

6.3 常见解密方式

枚举,自定义逆向算法,可逆向

6.4 了解常规加密算法的特性

长度位数,字符规律,代码分析,搜索获取等

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 可以使用加密算法来实现密码加密和解密。常用的加密算法包括 MD5、SHA、DES、AES 等。 以下是一个使用 AES 算法进行密码加密和解密的示例代码: ```java import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import java.security.NoSuchAlgorithmException; import java.util.Base64; public class PasswordEncryption { private static final String AES = "AES"; public static String encrypt(String password, String key) throws Exception { SecretKeySpec secretKeySpec = getSecretKeySpec(key); Cipher cipher = Cipher.getInstance(AES); cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec); byte[] encryptedBytes = cipher.doFinal(password.getBytes()); return Base64.getEncoder().encodeToString(encryptedBytes); } public static String decrypt(String encryptedPassword, String key) throws Exception { SecretKeySpec secretKeySpec = getSecretKeySpec(key); Cipher cipher = Cipher.getInstance(AES); cipher.init(Cipher.DECRYPT_MODE, secretKeySpec); byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedPassword)); return new String(decryptedBytes); } private static SecretKeySpec getSecretKeySpec(String key) throws NoSuchAlgorithmException { KeyGenerator keyGenerator = KeyGenerator.getInstance(AES); keyGenerator.init(128); SecretKey secretKey = keyGenerator.generateKey(); byte[] encodedKey = (key + secretKey.hashCode()).getBytes(); return new SecretKeySpec(encodedKey, AES); } } ``` 使用示例: ```java public class Main { public static void main(String[] args) throws Exception { String password = "password123"; String key = "secretKey"; String encryptedPassword = PasswordEncryption.encrypt(password, key); System.out.println("Encrypted password: " + encryptedPassword); String decryptedPassword = PasswordEncryption.decrypt(encryptedPassword, key); System.out.println("Decrypted password: " + decryptedPassword); } } ``` 输出结果: ``` Encrypted password: VfVvqKgiKf2vSxmdOJfJyQ== Decrypted password: password123 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值