首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用SHA512散列

用SHA512散列
EN

Stack Overflow用户
提问于 2019-06-11 13:26:10
回答 2查看 538关注 0票数 1

我为Api端点提供了一个名为smsmo的表,模型类是Smsmo,其中包含以下字段:

Smsmo:

代码语言:javascript
复制
customer code varchar(30),
customer phone varchar(30),
customer name varchar(30),
customer address varchar(30),
customer hash varchar(300)

在尝试保存或更新时,这些字段(电话、代码、名称)将被散列到散列字段中。

代码语言:javascript
复制
hash = name + code + phone

我已经有了这些阿皮:

ApiController:

代码语言:javascript
复制
public function indexSmsmo()
{
    $smsmos = Smsmo::all();
    return response()->json(['success' => true,'data'=>$smsmos], $this->successStatus);

}   

public function showSmsmo($id)
{
    $smsmo = Smsmo::find($id);

    if (is_null($smsmo)) {
        return $this->sendError('SMS Outgoing not found.');
    }        
    return response()->json(['success' => true,'data'=>$smsmo], $this->successStatus);
}    

public function storeSmsmo(Request $request)
{
    $smsmo = Smsmo::create($request->all());
    return response()->json(['success' => $smsmo], $this-> successStatus);
}    

public function editSmsmo($id)
{
    $smsmo = Smsmo::find($id);
    return response()->json(['success' => true,'data'=>$smsmo], $this->successStatus);
}

public function updateSmsmo(Request $request, $id)
{
    $smsmo = Smsmo::find($id);
    $smsmo = $smsmo->update($request->all());
    return response()->json(['success' => true,'data'=>$smsmo], $this->successStatus);
}

public function deleteSmsmo($id)
{
    $smsmo = Smsmo::find($id)->delete();
}

那么,在发送端点之前,如何使用SHA512和上面的函数进行散列。

EN

回答 2

Stack Overflow用户

发布于 2019-06-11 14:11:56

PHP有一个内建 hash()函数,它涵盖了包括SHA-512在内的许多算法,因此类似的内容应该可以工作:

代码语言:javascript
复制
public function storeSmsmo(Request $request)
{
    $smsmo = new Smsmo;
    $smsmo->fill($request->all());
    $smsmo->hash = hash('sha512', $smsmo->name.$smsmo->code.$smsmo->phone);
    $smsmo->save();
    return response()->json(['success' => $smsmo], $this-> successStatus);
}    

public function updateSmsmo(Request $request, $id)
{
    $smsmo = Smsmo::find($id);
    $smsmo->fill($request->all());
    $smsmo->hash = hash('sha512', $smsmo->name.$smsmo->code.$smsmo->phone);
    $smsmo->save();
    return response()->json(['success' => true,'data'=>$smsmo], $this->successStatus);
}

或者,您可以通过扩展模型生命周期来提高代码的可重用性:

代码语言:javascript
复制
class Smsmo extends Model
{
    ...
    public static function boot()
    {
        parent::boot();

        static::saving(function ($model){
            $model->hash = hash('sha512', $model->name.$model->code.$model->phone);
        });
    }
    ...
}

简而言之,在保存static::saving()模型之前,您在Smsmo中定义的任何内容都将被执行。通过这种方法,您不必对控制器进行任何更改。

票数 1
EN

Stack Overflow用户

发布于 2019-06-11 14:29:33

您可以使用Laravel 进行此操作。

代码语言:javascript
复制
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Smsmo extends Model
{
    /**
     * Set the hash attribute.
     *
     * @param  string  $value
     * @return void
     */

    public function setHashAttribute($value)
    {
        $hash = $this->phone.$this->code.$this->name;
        $this->attributes['hash'] = hash('sha512', $hash, false);
    }
}

不需要改变控制器的功能。

这是有关更多细节的文档。https://laravel.com/docs/5.8/eloquent-mutators

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56544840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档