日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

为什么接口需要加密传输

發(fā)布時間:2024/4/13 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为什么接口需要加密传输 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

單向散列加密

散列是信息的提煉,通常其長度要比信息小得多,且為一個固定長度。加密性強的散列一定是不可逆的,這就意味著通過散列結果,無法推出任何部分的原始信息。任何輸入信息的變化,哪怕僅一位,都將導致散列結果的明顯變化,這稱之為雪崩效應。散列還應該是防沖突的,即找不出具有相同散列結果的兩條信息。具有這些特性的散列結果就可以用于驗證信息是否被修改。
單向散列函數(shù)一般用于產生消息摘要,密鑰加密等,常見的有:
1、MD5(Message Digest Algorithm 5):是RSA數(shù)據(jù)安全公司開發(fā)的一種單向散列算法,非可逆,相同的明文產生相同的密文。
2、SHA(Secure Hash Algorithm):可以對任意長度的數(shù)據(jù)運算生成一個160位的數(shù)值;
SHA-1與MD5的比較
因為二者均由MD4導出,SHA-1和MD5彼此很相似。相應的,他們的強度和其他特性也是相似,但還有以下幾點不同:
1、對強行供給的安全性:最顯著和最重要的區(qū)別是SHA-1摘要比MD5摘要長32 位。使用強行技術,產生任何一個報文使其摘要等于給定報摘要的難度對MD5是2128數(shù)量級的操作,而對SHA-1則是2160數(shù)量級的操作。這樣,SHA-1對強行攻擊有更大的強度。
2、對密碼分析的安全性:由于MD5的設計,易受密碼分析的攻擊,SHA-1顯得不易受這樣的攻擊。
3、速度:在相同的硬件上,SHA-1的運行速度比MD5慢。

1、特征:雪崩效應、定長輸出和不可逆。
2、作用是:確保數(shù)據(jù)的完整性。
3、加密算法:md5(標準密鑰長度128位)、sha1(標準密鑰長度160位)、md4、CRC-32
4、加密工具:md5sum、sha1sum、openssl dgst。
5、計算某個文件的hash值,例如:md5sum/shalsum FileName,openssl dgst –md5/-sha

MD5加密

在線MD5解密與加密

http://www.cmd5.com/

Java操作MD5加密

MD5加鹽實現(xiàn)方式

一般使用的加鹽:

md5(Password+UserName),即將用戶名和密碼字符串相加再MD5,這樣的MD5摘要基本上不可反查。

但有時候用戶名可能會發(fā)生變化,發(fā)生變化后密碼即不可用了(驗證密碼實際上就是再次計算摘要的過程)。

----------

因此我們做了一個非常簡單的加鹽算法,每次保存密碼到數(shù)據(jù)庫時,都生成一個隨機16位數(shù)字,將這16位數(shù)字和密碼相加再求MD5摘要,然后在摘要中再將這16位數(shù)字按規(guī)則摻入形成一個48位的字符串。

在驗證密碼時再從48位字符串中按規(guī)則提取16位數(shù)字,和用戶輸入的密碼相加再MD5。按照這種方法形成的結果肯定是不可直接反查的,且同一個密碼每次保存時形成的摘要也都是不同的。

代碼如下:

?

/*** MD5加鹽加密*/ public class PasswordUtil {/*** 生成含有隨機鹽的密碼*/public static String generate(String password) {Random r = new Random();StringBuilder sb = new StringBuilder(16);sb.append(r.nextInt(99999999)).append(r.nextInt(99999999));int len = sb.length();if (len < 16) {for (int i = 0; i < 16 - len; i++) {sb.append("0");}}String salt = sb.toString();password = md5Hex(password + salt);char[] cs = new char[48];for (int i = 0; i < 48; i += 3) {cs[i] = password.charAt(i / 3 * 2);char c = salt.charAt(i / 3);cs[i + 1] = c;cs[i + 2] = password.charAt(i / 3 * 2 + 1);}return new String(cs);}/*** 校驗密碼是否正確*/public static boolean verify(String password, String md5) {char[] cs1 = new char[32];char[] cs2 = new char[16];for (int i = 0; i < 48; i += 3) {cs1[i / 3 * 2] = md5.charAt(i);cs1[i / 3 * 2 + 1] = md5.charAt(i + 2);cs2[i / 3] = md5.charAt(i + 1);}String salt = new String(cs2);return md5Hex(password + salt).equals(new String(cs1));}/*** 獲取十六進制字符串形式的MD5摘要*/public static String md5Hex(String src) {try {MessageDigest md5 = MessageDigest.getInstance("MD5");byte[] bs = md5.digest(src.getBytes());return new String(new Hex().encode(bs));} catch (Exception e) {return null;}}public static void main(String[] args) {// 加密+加鹽String password1 = generate("admin");System.out.println("結果:" + password1 + " 長度:" + password1.length());// 解碼System.out.println(verify("admin", password1));// 加密+加鹽String password2 = generate("admin");System.out.println("結果:" + password2 + " 長度:" + password2.length());// 解碼System.out.println(verify("admin", password2)); <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.learn</groupId><artifactId>encription_b</artifactId><version>0.0.1-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.0.RELEASE</version></parent><dependencies><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.1.1</version></dependency><!-- mysql 依賴 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- SpringBoot 對lombok 支持 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!-- SpringBoot web 核心組件 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></dependency><!-- SpringBoot 外部tomcat支持 --><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId></dependency><!-- springboot-log4j --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j</artifactId><version>1.3.8.RELEASE</version></dependency><!-- springboot-aop 技術 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><!-- https://mvnrepository.com/artifact/commons-lang/commons-lang --><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>2.6</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId></dependency><!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId></dependency><dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1.1.2</version></dependency><!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15 --><dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15</artifactId><version>1.46</version></dependency><!-- https://mvnrepository.com/artifact/net.iharder/base64 --><dependency><groupId>net.iharder</groupId><artifactId>base64</artifactId><version>2.3.8</version></dependency></dependencies></project>

?

總結

以上是生活随笔為你收集整理的为什么接口需要加密传输的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。