1. 如何在阿里雲的虛擬主機中配置laravel環境
拿laravel5.1來說:
在根目錄下創建一個local文件夾,把網站根目錄下除了public文件夾以外所有文件及文件夾剪切到local文件夾中
然後把public文件夾下的所有文件剪切到網站根目錄,接著刪除public文件夾,這樣入口就變成根目錄而不是public了,接下來
打開根目錄下的index.php(之前/public/index.php)
將
require __DIR__.'/../bootstrap/autoload.php';
修改為
require __DIR__.'/local/bootstrap/autoload.php';
將
$app = require_once __DIR__.'/../bootstrap/app.php';
修改為
$app = require_once __DIR__.'/local/bootstrap/app.php';
打開/local/config/app.php(之前的/config/app.php)
將
'key' => env('APP_KEY', 'SomeRandomString'),
'cipher' => 'AES-256-CBC',
改為
'key' => env('APP_KEY', '1234567890qwerty'),
'cipher' => 'AES-128-CBC',
其中key使用長度為16的隨機字元串,由於萬網不支持'AES-256-CBC'所以用128位加密就可以了,128用16個隨機字元串做key,256用32個。
上傳到萬網虛擬主機,然後在後台把PHP版本改成5.5就可以了,就妥妥的成功運行laravel了。
第一步
最後請小心如果你的CSSjsFONT的文件有用的話 請把他們也拷貝到Larvael的根目錄下
否則你會發現你的css js都404啦 千萬要記住.
這里作者補充一句 只可在測試環境下這樣使用,否則真實環境會有安全問題!
2. php openssl aes-256-cbc key長度自動匹配了128的長度,為什麼
byte數組本來就是一些char數據。直接用加密tool對比結果
解決方案二:
都是unsigned char,你需要循環轉換成16進制數字,然後輸出
3. 為什麼 Laravel 會成為最成功最流行的 PHP 框架
Laravel是一個有著美好前景的年輕框架,它的社區充滿著活力,同時提供了完整而清晰的文檔,而且為快速、安全地開發現代應用提供了必要的功能。
2011年,Taylor
Otwell首次將Laravel帶給這個世界,彼時,Laravel就是一個全新且現代的框架。Laravel基於MVC架構,可以滿足諸如事件處理、
用戶身份驗證等各種需求,同時通過包管理實現模塊化和可擴展的代碼,並且對資料庫管理有著健壯的支持。
不管是專家還是新手,一旦接觸到Laravel,都會有相見恨晚之感——這正是你在為PHP項目尋找的框架。本文我們將討論為什麼Laravel會成為最成功最流行的PHP框架。
模塊化&可擴展性
Laravel是模塊化和可擴展的,你可以在包含超過5500個程序包的Packalyst中找到你想要添加的任何代碼。
Lumen&API
Lumen是一個由Laravel衍生的專注於性能的微框架。使用Lumen提供的高性能API你可以更加簡單快速地開發微型項目。Lumen使用最小的配置集成了Laravel的所有重要特性,你可以通過將代碼復制到Laravel項目來實現框架的完整遷移。
<?php
$app->get('/', function() {
return view('lumen');
});
$app->post('framework/{id}', function($framework) {
$this->dispatch(new Energy($framework));
});
HTTP路由
Laravel擁有類似於Ruby on Rails的快速高效的路由系統。它可以讓用戶通過在瀏覽器上輸入路徑的方式讓應用程序的各部分相關聯。
Route::get('/', function () {
return 'Hello World';
});
HTTP中間件
Route::get('/', function () {
return 'Hello World';
});
Laravel可以通過中間件對應用進行保護——中間件會處理分析和過濾到達伺服器的HTTP請求。你可以使用中間件來驗證注冊用戶、避免跨站腳本攻擊(XSS)以及其它安全問題。
<?php
namespace App\Http\Middleware;
use Closure;
class OldMiddleware {
public function handle($request, Closure $next) {
if ($request->input('age') <= 200) {
return redirect('home');
}
return $next($request);
}
}
緩存
Laravel提供了健壯的緩存系統,使用緩存可以讓應用載入地更加快速,從而帶來更好的用戶體驗。
Cache::extend('mongo', function($app) {
return Cache::repository(new MongoStore);
});
身份驗證
安全是至關重要的。Laravel自帶對本地用戶的身份驗證,並可以使用「remember」 選項來記住用戶。此外你還可以引入一些額外參數,例如是否是活躍用戶。
if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1 ], $remember)) {
// The user is being remembered...
}
集成Stripe
Laravel Cashier可以滿足你開發支付系統過程中所需要的任何需求。除此之外,它還同步並集成了用戶身份驗證系統。所以,你不再需要擔心如何將計費系統集成到開發中了。
$user = User::find(1);
$user->subscription('monthly')->create($creditCardToken);
任務自動化
Elixir是一個讓我們可以使用Gulp定義任務的Laravel API,我們可以使用Elixir定義預處理器來壓縮CSS 和JavaScript。
elixir(function(mix) {
mix.browserify('main.js');
});
加密
一個安全的應用應該做到可以對數據進行加密。在Laravel中,可以使用OpenSSL和AES-256-CBC加密演算法來滿足你所有的加密需求。此外,所有的加密值都通過認證碼進行簽名以避免加密信息被篡改。
use Illuminate\Contracts\Encryption\DecryptException;
try {
$decrypted = Crypt::decrypt($encryptedValue);
} catch (DecryptException $e) {
//
}
事件處理
Laravel應用中對事件的定義、記錄和監聽都非常便捷。服務提供者EventServiceProvider中的listen屬性包含了應用中的所有事件列表。
protected $listen = [
'App\Events\PodcastWasPurchased' => [
'App\Listeners\EmailPurchaseConfirmation',
],
];
分頁
在Laravel中分頁非常簡單,因為它能夠根據用戶在瀏覽器中的當前頁生成一系列分頁鏈接。
<?php
namespace App\Http\Controllers;
use DB;
use App\Http\Controllers\Controller;
class UserController extends Controller {
public function index() {
$users = DB::table('users')->paginate(15);
return view('user.index', ['users' => $users]);
}
}
對象關系映射(ORM)
Laravel包含了一個資料庫處理層,其中的對象關系映射被稱作Eloquent。另外這個對象關系映射也適用於PostgreSQL。
$users = User::where('votes', '>', 100)->take(10)->get();
foreach ($users as $user) {
var_mp($user->name);
}
單元測試
單元測試的開發是一個耗費大量時間的任務,但是它卻保證了我們的應用能夠正常工作,不出問題。Laravel使用PHPUnit進行單元測試。
class ExampleTest extends TestCase {
public function testBasicExample() {
$this->visit('/')->see('Laravel 5')->dontSee('Rails');
}
}
隊列(Queue)
Laravel提供了在後台使用待辦事項清單(to do list)處理復雜、漫長流程的選擇,好吧,其實就是隊列,隊列可以讓我們非同步處理某些流程而不需要用戶在載入頁面時長時間的等待。
Queue::push ( new SendEmail ( $ message ));
4. PHP 加密:AES & RSA
最近兩年一直從事與金融相關項目的開發與維護。但是,關於 PHP 加密解密的最佳實踐,網上沒有人給出一個完美的總結。恰逢最近看了《圖解密碼技術》一書,對 PHP 加解密有了更深刻的認識。
為了避免各位看枯燥的文字理論,開篇我就把總結給出:
一、對稱加密
對稱加密的特點是加解密速度快,加密後的密文強度目前還沒有硬解的可能性。但是,在未來隨著計算機性能的提升有可能會出現被破解的可能性。
對稱加密的缺點也很明顯。對稱加密的加密過程與解密過程使用的是同一把密鑰。一旦泄漏密鑰,加密就失去了任何意義。
根據《圖解密碼技術》一書的推薦,對稱加密目前推薦使用 AES。在 PHP 當中要實現 AES 加解密,是使用 openssl 擴展來實現。所以,請確保你的 PHP 已經開啟了 openssl 擴展。
可以通過如下方式檢測:
或者如下方式檢測:
AES 的加密模式屬於分組密碼模式。所謂分組密碼,是加密時把明文按照固定的長度分組,然後再進行加密。當然,細節之處很很多不同。AES 分組模式有多種:ECB、CBC、CFB、OFB、CTR 五種分組模式。目前優先推薦使用 CBC 模式。
如果使用 CBC 模式,那麼在加密的時候,就需要一個前置的加密向量 IV。當初博主在使用 AES 來加密的時候,就很奇怪一個對稱加密為何要這個向量。因為,在博主寒冰的潛意識里,對稱加密只需要一個密鑰就 Ok 了。沒想到 AES 加密還有多種模式,而這個 CBC 模式恰恰就需要一個這樣的向量值。關於這個向量大家可以在網上查閱相關的資料。這個東西非常重要,也非常好理解。
關於 PHP AES 加解密會用到的相關方法:
AES 支持三種強度:128、192、256。128 位的強度最低,但是,加密解密速度較快。256 位強度最高,但是,加密解密速度最低。所以,大家根據自己系統的重要程度選擇使用對應強度。通常普通的金融項目使用 192 位完整夠用了。頂級的就用 256 位。其他的就用 128 位吧。
二、非對稱加密
非對稱加密是指公鑰加密私鑰解密,私鑰加密公鑰解密的演算法。非對稱加密的演算法有很多。《圖解密碼技術》一書推薦使用 RSA 演算法。它使用起來也非常簡單。
要使用 RSA 演算法。首先,我們必須生成一對公鑰私鑰。其實生成公鑰私鑰很簡單。
在 Linux 系統,直接使用如下命令生成:
此命令會生 ~/.ssh/ 目錄下生成兩個文件:
id_rsa 是私鑰, is_rsa.pub 是公鑰。
關於 PHP RSA 加解密會用到的相關方法:
以上就是關於在 PHP 項目開發中,我們使用的加密解密演算法的一個總結。博主寒冰在總結過程中難免會有不足之處,還請大家指正!謝謝!
5. 關於php des 加密 密鑰長度問題
php5.6的key長度要求是32位元組的,你這個明顯不滿足要求的。
參考以下寫法:
<?php
# --- ENCRYPTION ---
# the key should be random binary, use scrypt, bcrypt or PBKDF2 to
# convert a string into a key
# key is specified using hexadecimal
$key = pack('H*', "");
# show key size use either 16, 24 or 32 byte keys for AES-128, 192
# and 256 respectively
$key_size = strlen($key);
echo "Key size: " . $key_size . "\n";
$plaintext = "This string was AES-256 / CBC / ZeroBytePadding encrypted.";
# create a random IV to use with CBC encoding
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
# creates a cipher text compatible with AES (Rijndael block size = 128)
# to keep the text confidential
# only suitable for encoded input that never ends with value 00h
# (because of default zero padding)
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key,
$plaintext, MCRYPT_MODE_CBC, $iv);
# prepend the IV for it to be available for decryption
$ciphertext = $iv . $ciphertext;
# encode the resulting cipher text so it can be represented by a string
$ciphertext_base64 = base64_encode($ciphertext);
echo $ciphertext_base64 . "\n";
# === WARNING ===
# Resulting cipher text has no integrity or authenticity added
# and is not protected against padding oracle attacks.
# --- DECRYPTION ---
$ciphertext_dec = base64_decode($ciphertext_base64);
# retrieves the IV, iv_size should be created using mcrypt_get_iv_size()
$iv_dec = substr($ciphertext_dec, 0, $iv_size);
# retrieves the cipher text (everything except the $iv_size in the front)
$ciphertext_dec = substr($ciphertext_dec, $iv_size);
# may remove 00h valued characters from end of plain text
$plaintext_dec = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key,
$ciphertext_dec, MCRYPT_MODE_CBC, $iv_dec);
echo $plaintext_dec . "\n";
?>
6. 前端使用CryptoJS AES加密 ,後端php解密問題
PHP7.1 已經不能用mcrypt了,所以我用的是openssl_encrypt和openssl_decrypt。
<?php
$data="ThisisanAEScryptdemo.";
$privateKey="";//KEY16位元組用aes-128-cbc,32位元組用aes-256-cbc
$iv="4490d2ded4f2d4ad";//AES的IV是16個位元組
//加密
//$encrypted=openssl_encrypt($data,'aes-128-cbc',$privateKey,0,$iv);
$encrypted=openssl_encrypt($data,'aes-256-cbc',$privateKey,0,$iv);
echo$encrypted,PHP_EOL;
//解密
$encryptedData=$encrypted;
//$decrypted=openssl_decrypt($encryptedData,'aes-128-cbc',$privateKey,0,$iv);
$decrypted=openssl_decrypt($encryptedData,'aes-256-cbc',$privateKey,0,$iv);
echo($decrypted);
輸出結果如下:
EPcMQRXA53/hRkPyILFI4fF/9sW2X53tLiDT26khNsA=
ThisisanAEScryptdemo.
7. 求php aes加密代碼,編碼是UTF-8
$key=pack('H*',"");
//顯示AES-128,192,256對應的密鑰長度:
//16,24,32位元組。
$key_size=strlen($key);
echo"Keysize:".$key_size." ";
$plaintext="ThisstringwasAES-256/CBC/ZeroBytePaddingencrypted.";
$iv_size=mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC);
$iv=mcrypt_create_iv($iv_size,MCRYPT_RAND);$ciphertext=mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$key,
$plaintext,MCRYPT_MODE_CBC,$iv);