Java 常用的 4 种加密方式(MD5+Base64+SHA+BCrypt)
一、工具类
md5加密工具类
- public class MD5Utils {
- private static final String hexDigIts[] = {"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"};
- /**
- * MD5加密
- * @param origin 字符
- * @param charsetname 编码
- * @return
- */
- public static String MD5Encode(String origin, String charsetname){
- String resultString = null;
- try{
- resultString = new String(origin);
- MessageDigest md = MessageDigest.getInstance("MD5");
- if(null == charsetname || "".equals(charsetname)){
- resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
- }else{
- resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname)));
- }
- }catch (Exception e){
- }
- return resultString;
- }
- public static String byteArrayToHexString(byte b[]){
- StringBuffer resultSb = new StringBuffer();
- for(int i = 0; i < b.length; i++){
- resultSb.append(byteToHexString(b[i]));
- }
- return resultSb.toString();
- }
- public static String byteToHexString(byte b){
- int n = b;
- if(n < 0){
- n += 256;
- }
- int d1 = n / 16;
- int d2 = n % 16;
- return hexDigIts[d1] + hexDigIts[d2];
- }
- }
base64加密工具类
- public class Base64Util {
- // 字符串编码
- private static final String UTF_8 = "UTF-8";
- /**
- * 加密字符串
- * @param inputData
- * @return
- */
- public static String decodeData(String inputData) {
- try {
- if (null == inputData) {
- return null;
- }
- return new String(Base64.decodeBase64(inputData.getBytes(UTF_8)), UTF_8);
- } catch (UnsupportedEncodingException e) {
- }
- return null;
- }
- /**
- * 解密加密后的字符串
- * @param inputData
- * @return
- */
- public static String encodeData(String inputData) {
- try {
- if (null == inputData) {
- return null;
- }
- return new String(Base64.encodeBase64(inputData.getBytes(UTF_8)), UTF_8);
- } catch (UnsupportedEncodingException e) {
- }
- return null;
- }
- public static void main(String[] args) {
- System.out.println(Base64Util.encodeData("我是中文"));
- String enStr = Base64Util.encodeData("我是中文");
- System.out.println(Base64Util.decodeData(enStr));
- }
- }
Bcrypt工具类
<pre class="has" name="code"><code class="language-java hljs"><ol class="hljs-ln" style="width:841px"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">BcryptCipher</span> </span>{</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-comment">// generate salt seed</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">final</span> <span class="hljs-keyword">int</span> SALT_SEED = <span class="hljs-number">12</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-comment">// the head fo salt</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">final</span> String SALT_STARTSWITH = <span class="hljs-string">"$2a$12"</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">final</span> String SALT_KEY = <span class="hljs-string">"salt"</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">final</span> String CIPHER_KEY = <span class="hljs-string">"cipher"</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-comment"><span class="hljs-comment">/**</span></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="12"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment"> * Bcrypt encryption algorithm method</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="13"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment"> * <span class="hljs-doctag">@param</span> encryptSource</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="14"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment"> * need to encrypt the string</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="15"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment"> * <span class="hljs-doctag">@return</span> Map , two values in Map , salt and cipher</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="16"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment"> */</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="17"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> Map<String, String> <span class="hljs-title">Bcrypt</span><span class="hljs-params">(<span class="hljs-keyword">final</span> String encryptSource)</span> </span>{</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="18"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> String salt = BCrypt.gensalt(SALT_SEED);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="19"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> Map<String, String> bcryptResult = Bcrypt(salt, encryptSource);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="20"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">return</span> bcryptResult;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="21"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="22"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-comment"><span class="hljs-comment">/**</span></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="23"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment"> *</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="24"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment"> * <span class="hljs-doctag">@param</span> salt encrypt salt, Must conform to the rules</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="25"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment"> * <span class="hljs-doctag">@param</span> encryptSource</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="26"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment"> * <span class="hljs-doctag">@return</span></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="27"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment"> */</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="28"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> Map<String, String> <span class="hljs-title">Bcrypt</span><span class="hljs-params">(<span class="hljs-keyword">final</span> String salt, <span class="hljs-keyword">final</span> String encryptSource)</span> </span>{</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="29"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">if</span> (StringUtils.isBlank(encryptSource)) {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="30"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> RuntimeException(<span class="hljs-string">"Bcrypt encrypt input params can not be empty"</span>);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="31"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="32"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="33"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">if</span> (StringUtils.isBlank(salt) || salt.length() != <span class="hljs-number">29</span>) {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="34"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> RuntimeException(<span class="hljs-string">"Salt can't be empty and length must be to 29"</span>);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="35"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="36"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">if</span> (!salt.startsWith(SALT_STARTSWITH)) {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="37"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> RuntimeException(<span class="hljs-string">"Invalid salt version, salt version is $2a$12"</span>);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="38"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="39"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="40"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> String cipher = BCrypt.hashpw(encryptSource, salt);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="41"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> Map<String, String> bcryptResult = <span class="hljs-keyword">new</span> HashMap<String, String>();</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="42"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> bcryptResult.put(SALT_KEY, salt);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="43"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> bcryptResult.put(CIPHER_KEY, cipher);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="44"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">return</span> bcryptResult;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="45"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="46"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="47"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">}</div></div></li></ol></code><div class="hljs-button {2}" data-title="复制" onclick="hljs.copyCode(event)"></div></pre><p> </p> </li>
二、加密测试
MD5加密测试
- /**
- * MD5加密
- */
- public class MD5Test {
- public static void main(String[] args) {
- String string = "你好 世界";
- String byteArrayToHexString = MD5Utils.byteArrayToHexString(string.getBytes());
- System.out.println(byteArrayToHexString);//e68891e698afe4b880e58fa5e8af9d
- }
- }
base64加密测试
- /**
- * base64加密
- */
- public class Bast64Tester {
- public static void main(String[] args) {
- String string = "你好 世界";
- String encodeData = Base64Util.encodeData(string); //加密
- String decodeData = Base64Util.decodeData(encodeData); //解密
- System.out.println(encodeData);//5oiR5piv5LiA5Liq5a2X56ym5Liy
- System.out.println(decodeData);//你好 世界
- }
- }
SHA加密测试
- /**
- * SHA加密
- */
- public class ShaTest {
- public static void main(String[] args) {
- String string = "你好 世界";
- String sha256Crypt = Sha2Crypt.sha256Crypt(string.getBytes());
- System.out.println(sha256Crypt);//$5$AFoQTeyt$TiqmobvcQXjXaAQMYosAAO4KI8LfigZMGHzq.Dlp4NC
- }
- }
BCrypt加密测试
<pre class="has" name="code"><code class="language-java hljs"><ol class="hljs-ln" style="width:984px"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment"><span class="hljs-comment">/**</span></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment"> * BCrypt加密</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment"> */</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">BCryptTest</span> </span>{</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> String string = <span class="hljs-string">"你好世界"</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> Map<String, String> bcrypt = BcryptCipher.Bcrypt(string);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> System.out.println(bcrypt.keySet()); <span class="hljs-comment">//[cipher, salt]</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="12"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> System.out.println(bcrypt.get(<span class="hljs-string">"cipher"</span>)); <span class="hljs-comment">//$2a$12$ylb92Z84gqlrSfzIztlCV.dK0xNbw.pOv3UwXXA76llOsNRTJsE/.</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="13"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> System.out.println(bcrypt.get(<span class="hljs-string">"salt"</span>)); <span class="hljs-comment">//$2a$12$ylb92Z84gqlrSfzIztlCV.</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="14"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="15"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> Map<String, String> bcrypt2 = BcryptCipher.Bcrypt(bcrypt.get(<span class="hljs-string">"salt"</span>),string);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="16"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> System.out.println(bcrypt2.get(<span class="hljs-string">"SALT_KEY"</span>)); <span class="hljs-comment">//null</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="17"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> System.out.println(bcrypt2.get(<span class="hljs-string">"CIPHER_KEY"</span>)); <span class="hljs-comment">//null</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="18"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="19"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">}</div></div></li></ol></code><div class="hljs-button {2}" data-title="复制" onclick="hljs.copyCode(event)"></div></pre><p> </p> </li>
Java 常用的 4 种加密方式(MD5+Base64+SHA+BCrypt)相关推荐
- php中常用的几种加密方式以及md5加密漏洞以及解决方案
一.md5(php中的最常用的加密方式) 在用md5进行加密时,至少要将md5加密两次以上(包含两次),或者再加上盐进行加密 二.password_hash(php5.5以上版本才可以使用) 官方说明 ...
- 安卓项目实战之:Android常用的5种加密方式
前言 按加密结果是否可以被解密分为可逆和不可逆: 1,不可逆: MD5(Message-Digest消息摘要):不可逆,长度固定(32位),容易计算,仅一字节只差加密结果都会有很大区别 通常情况下为了 ...
- JS的3种加密方式:base64编码、md5加密及sha加密
用法总结:创建加密js文件,引入加密js 注:md5.sha1加密方式有多种方法可用 1.加密js文件 1.1base64.js function Base64() {// private prope ...
- C#下的两种加密方式MD5和DEC
md5加密 /// <summary> /// MD5加密 /// </summary> /// <param name="toCryS ...
- token令牌常用的四种加密方式
1.base64 '防君子不防小人' 方法 作用 参数 返回值 b64encode 将输入的参数转化为base64规则的串 预加密的明文,类型为bytes:例:b'guoxiaonao' base64 ...
- PHP中的6种加密方式
PHP中的6种加密方式 1. MD5加密 string md5 ( string $str [, bool $raw_output = false ] ) 参数 str -- 原始字符串. raw ...
- Java多线程的11种创建方式以及纠正网上流传很久的一个谬误
创建线程比较传统的方式是继承Thread类和实现Runnable,也可以用内部类,Lambda表达式,线程池,FutureTask等. 经常面试会问到继承Thread类和实现Runnable的区别,然 ...
- spring入门之Spring 常用的三种注入方式
Spring 常用的三种注入方式 Spring 通过 DI(依赖注入)实现 IOC(控制反转),常用的注入方式主要有三种:构造方法注入,set 方法注入,基于注解的注入. 一.通过构造方法注入 先简单 ...
- 一个计算机爱好者的不完整回忆(八)一种加密方式
GB4,GW,FPE,当年老的DOS游戏玩家可能会有印象吧. 当年DOS命令刚学几堂课,就玩游戏了,有一个游戏叫天蚕变,俗称蜘蛛美女,就是用蜘蛛划线,当划走的区域达到一定百分比的时候就算过关,然后会出 ...
- 数据传输安全的几种加密方式
Android数据加密安全 其他几种加密方式: Android数据加密之Rsa加密 Android数据加密之Aes加密 Android数据加密之Des加密 Android数据加密之MD5加密 Andr ...
最新文章
- Linux shell 学习笔记(6)— vim 编辑器使用方法及技巧
- SqlServer 中的临时表与表变量
- suList() 和 asList()
- Android Material Design TabLayout属性app:tabMode和app: tabGravity
- magento问题集
- MySql的存储过程
- python脚本自动运行失败_Linux中定时任务执行python脚本失败的解决方法
- RabbitMQ和Kafka的显著差异(5)
- [转]解决eclipse-helios中Errors running builder Java...
- GitHub简单教程
- opencv 图片缩放
- 足球比赛两强相遇概率
- 感受晋味新年俗 你的高铁票可享景区门票优惠
- easyphp 登陆mysql_EasyPHP 16.1.1无法启动MySQL
- 总结低代码海报平台编辑器难点
- js 伪造referer_详解php伪造Referer请求反盗链资源
- 如何合理规划每日时间
- 台达服务器电源性能怎么样,台达电源怎么样?该怎么选择台达电源?
- 测时差定位算法matlab,时差和频差无源定位方法研究matlab程序
- Arduino入门篇——继电器控制风扇