導航:首頁 > 編程語言 > php和javasha1

php和javasha1

發布時間:2025-05-26 15:25:06

php已經對文件名進行sha1加密了,怎麼才能在實現下載文件的時候獲得文件原名呢

不可能的,單項散列演算法
解釋:
安全哈希演算法(Secure Hash Algorithm)主要適用於數字簽名標准(Digital Signature Standard
DSS)裡面定義的數字簽名演算法(Digital Signature Algorithm
DSA)。對於長度小於2^64位的消息,SHA1會產生一個160位的消息摘要。該演算法經過加密專家多年來的發展和改進已日益完善,並被廣泛使用。該算
法的思想是接收一段明文,然後以一種不可逆的方式將它轉換成一段(通常更小)密文,也可以簡單的理解為取一串輸入碼(稱為預映射或信息),並把它們轉化為
長度較短、位數固定的輸出序列即散列值(也稱為信息摘要或信息認證代碼)的過程。散列函數值可以說是對明文的一種「指紋」或是「摘要」所以對散列值的數字簽名就可以視為對此明文的數字簽名

Ⅱ php: sha1和 md5 兩種加密的區別

MD5
消息摘要演算法5(MD5),把信息分為512比特的分組,並且創建一個128比特的摘要。
SHA-1
安全hash演算法(SHA-1),也是基於MD5的,使用一個標准把信息分為512比特的分組,並且創建一個160比特的摘要

Ⅲ 求教PHP和java大神 base64_encode(hash_hmac('sha1',$public_key,$private_key,TRUE)); 轉 java

如果你的API服務安全認證協議中要求使用hmac_sha1方法對信息進行編碼,

而你的服務是由PHP實現的,客戶端是由JAVA實現的,那麼為了對簽名正確比對,就需要在兩者之間建立能匹配的編碼方式.
efine('ID','123456');
define('KEY','k123456');

$strToSign = "test_string";

$utf8Str = mb_convert_encoding($strToSign, "UTF-8");
$hmac_sha1_str = base64_encode(hash_hmac("sha1", $utf8Str, KEY));
$signature = urlencode($hmac_sha1_str);
print_r($signature);

JAVA側需要注意如下幾點:
1. hmac_sha1編碼結果需要轉換成hex格式

2. java中base64的實現和php不一致,其中java並不會在字元串末尾填補=號以把位元組數補充為8的整數
3. hmac_sha1並非sha1, hmac_sha1是需要共享密鑰的

參考實現如下:
[java] view plain
import java.io.UnsupportedEncodingException;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.wicket.util.crypt.Base64UrlSafe;

public class test {
public static void main(String[] args) {
String key = "";
String toHash = "GET"+"\n"+"Thu, 09 Aug 2012 13:33:46 +0000"+"\n"+"/ApiChannel/Report.m";
//String toHashUtf8 = URLEncoder.encode(toHash, "UTF-8");
String res = hmac_sha1(toHash, key);
//System.out.print(res+"\n");

String signature;
try {
signature = new String(Base64UrlSafe.encodeBase64(res.getBytes()),"UTF-8");
signature = appendEqualSign(signature);
System.out.print(signature);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}

public static String hmac_sha1(String value, String key) {
try {
// Get an hmac_sha1 key from the raw key bytes
byte[] keyBytes = key.getBytes();
SecretKeySpec signingKey = new SecretKeySpec(keyBytes, "HmacSHA1");

// Get an hmac_sha1 Mac instance and initialize with the signing key
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(signingKey);

// Compute the hmac on input data bytes
byte[] rawHmac = mac.doFinal(value.getBytes());

// Convert raw bytes to Hex
String hexBytes = byte2hex(rawHmac);
return hexBytes;
} catch (Exception e) {
throw new RuntimeException(e);
}
}

private static String byte2hex(final byte[] b){
String hs="";
String stmp="";
for (int n=0; n<b.length; n++){
stmp=(java.lang.Integer.toHexString(b[n] & 0xFF));
if (stmp.length()==1) hs=hs+"0"+stmp;
else hs=hs+stmp;
}
return hs;
}

private static String appendEqualSign(String s){
int len = s.length();
int appendNum = 8 - (int)(len/8);
for (int n=0; n<appendNum; n++){
s += "%3D";
}
return s;
}
}

參考:http://www.iteye.com/topic/1002652

Ⅳ php中shal()函數的用法

加密吧,類似MD5()

一般申請會員,傳數據到資料庫,那麼密碼不能是明文,都是md5(密碼字元串)後放到資料庫中

Ⅳ PHP SHA1解密

sha1()轉換成40位的無規則數,但是兩次用sha1()得到的40位數是一樣的,所以:
比如提交過來的$password,你在驗證的時候,查詢資料庫里是否有相通的欄位:select * from ... where password = sha1('$password');
密碼輸入相同自然能查詢到。

Ⅵ php: sha1和 md5 兩種加密的區別

要說安全,單一的加密其實安全是差不多的.想安全就要多重加密,
這兩個其實來說也沒什麼太大的區別,只是sha1更長了些

Ⅶ php與c#生成sha1不一致的問題

您好,摘要的結果當然是一樣的,不一樣的是你在C#里又把結果轉換成了Base64的字元串,這當然就不一樣了,你又加工了一遍嘛。
FC-5E-03-8D-38-A5-70-32-08-54-41-E7-FE-70-10-B0 這是C#里md5實際的結果和php里的fc 5e 03 8d 38 a57032085441e7fe7010b0 怎麼會不一樣呢,一個位元組一個位元組看看。
使用使用toString(value,radix)看看。

Ⅷ sha1加密處理中文時在js和php中不一樣怎麼辦!如何處理!!!

前端對中文進行encodeURI,這樣中文就會變成字元,英文和數字,再對其進行sha1加密,就可以和php的一致了,之後在後端用urldecode還原為中文就行了。前端和後端的URL編碼函數是不同的需要注意。

閱讀全文

與php和javasha1相關的資料

熱點內容
吃雞進游戲編譯資源 瀏覽:726
浪潮伺服器遠程管理卡地址 瀏覽:37
自我介紹日本程序員 瀏覽:793
深圳程序員人力外包哪裡好 瀏覽:857
idea支持python 瀏覽:554
如何取消網站編譯 瀏覽:365
nov5安卓系統已鎖定什麼意思 瀏覽:748
城市低保刷臉是什麼app 瀏覽:942
python怎麼拆分表單 瀏覽:619
linux退出日誌命令 瀏覽:422
vivo手機加密了怎麼找回來 瀏覽:215
什麼app車主最好 瀏覽:30
針織廠電腦提花程序員需要學什麼 瀏覽:779
考二級可以在手機下載什麼app 瀏覽:241
圓的體積演算法圖解 瀏覽:127
wpsppt轉為pdf 瀏覽:764
python怎麼連接畫圖 瀏覽:948
程序員總結思路 瀏覽:406
php追加寫入txt 瀏覽:580
python機器編程字典 瀏覽:898