2024 年“中銀杯”甘肅省職業院校技能大賽-高職學生組-電子與信息大類-區塊鏈技術應用賽項樣題3_第1頁
2024 年“中銀杯”甘肅省職業院校技能大賽-高職學生組-電子與信息大類-區塊鏈技術應用賽項樣題3_第2頁
2024 年“中銀杯”甘肅省職業院校技能大賽-高職學生組-電子與信息大類-區塊鏈技術應用賽項樣題3_第3頁
2024 年“中銀杯”甘肅省職業院校技能大賽-高職學生組-電子與信息大類-區塊鏈技術應用賽項樣題3_第4頁
2024 年“中銀杯”甘肅省職業院校技能大賽-高職學生組-電子與信息大類-區塊鏈技術應用賽項樣題3_第5頁
已閱讀5頁,還剩27頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

2024年“中銀杯”甘肅省職業院校技能大賽

高職學生組電子與信息大類

區塊鏈技術應用賽項競賽樣題(3)

背景描述

電子簽章可實現與紙質文件蓋章操作相似的可視效果,以保障數

據來源的真實性、數據完整性以及簽名人行為的不可否認性。

傳統的電子簽章系統是基于中心化的,也就是數據是集中存儲在

中心數據庫中,這就導致傳統電子簽章使用記錄存在被篡改、偽造的

風險。

而區塊鏈電子簽章系統在傳統電子簽章系統的基礎上,可以借助

于區塊鏈技術,用不可篡改、不可抵賴的方式記錄電子簽章的整個流

轉過程,如領取、使用、查詢等,從而解決傳統電子簽章系統存在的

潛在風險。

某市政務部分擬開發一款區塊鏈電子簽章系統,該區塊鏈電子簽

章系統包含為印章使用者、監管、平臺運營方的管理功能,場景開放

平臺,印章底層引擎,和區塊鏈基座。場景開放平臺面向各類政務系

統與第三方電子簽名服務商提供電子簽章相關的開放能力。場景開放

平臺對上提供相關的基礎能力,對下連接區塊鏈基座。

1

模塊一:區塊鏈產品方案設計及系統運維(35分)

任務1-1:區塊鏈系統部署與運維(25分)

圍繞電子簽章區塊鏈平臺部署與運維需求,進行項目相關系統、節點以及管

理工具的部署工作。通過通過監控工具完成對網絡、節點服務的監控。最終利用

業務需求規范,完成系統日志、網絡參數、節點服務等系統結構維護。

1.登陸Linux服務器,安裝并部署下圖所示的單機、四機構、三群組、八

節點的星形組網拓撲區塊鏈系統;

2.登陸Linux服務器,安裝并部署區塊鏈系統控制臺,檢查部署控制臺是

否正常運行;

3.登錄Linux服務器,部署區塊鏈管理前置平臺;

4.登陸Linux服務器,使用終端生成新的節點,并且將該節點加入對應群

組然后啟動節點。

子任務1-2-1:登陸Linux服務器,安裝并部署下圖所示的單機、四機構、三

群組、八節點的星形組網拓撲區塊鏈系統,具體工作內容如下:

搭建部署多群組聯盟鏈并啟動所有節點;

通過命令驗證區塊鏈節點進程運行狀況;

通過命令驗證區塊鏈連接狀態和共識狀態日志輸出。

子任務1-2-2:登陸Linux服務器,安裝并部署區塊鏈系統控制臺,檢查部署控

制臺是否正常運行,具體工作內容如下:

解壓控制臺安裝包并拷貝配置文件到當前目錄;

配置控制臺證書;

啟動控制臺;

驗證控制臺是否正常運行。

子任務1-2-3:登錄Linux服務器,部署區塊鏈管理前置平臺,具體內容如下

解壓平臺操作對應安裝包;

配置秘鑰文件并檢查前置平臺啟動情況;

查看日志以及查看中間件進程;

2

檢查進程端口以及訪問服務。

子任務1-2-4:登陸Linux服務器,使用終端生成新的節點,并且將該節點

加入對應群組然后啟動節點,具體內容如下:

生成新節點,修改新節點配置;

啟動新節點,并查看節點的nodeid;

將新節點作為觀察節點加入群組1當中,并檢查是否加入成功。

任務1-2:區塊鏈系統測試(10分)

設計對區塊鏈系統的測試流程;結合實際業務需求,調用部署的智能合約中

進行系統測試、性能測試等;根據業務需求,分析并且修復給定智能合約中的安

全漏洞。利用模擬業務和測試工具來完成對區塊鏈系統服務數據的測試。

1.基于給定腳本完成區塊鏈管理平臺部署以及結果驗證,最后將執行結

果截圖保存。

實現區塊鏈管理平臺部署;

實現管理平臺啟動情況驗證;

驗證身份認證進程啟動情況驗證和瀏覽器驗證。

2.智能合約安全漏洞測試。

有如下智能合約:

pragmasolidity^0.8.3;

contractEtherGame{

uintpublictargetAmount=7ether;

addresspublicwinner;

functiondeposit()publicpayable{

require(msg.value==1ether,"Youcanonlysend1Ether");

uintbalance=address(this).balance;

require(balance<=targetAmount,"Gameisover");

if(balance==targetAmount){

winner=msg.sender;

}

}

3

functionclaimReward()public{

require(msg.sender==winner,"Notwinner");

(boolsent,)=msg.sender.call{value:address(this).balance}("");

require(sent,"FailedtosendEther");

}

}

contractAttack{

EtherGameetherGame;

constructor(EtherGame_etherGame){

etherGame=EtherGame(_etherGame);

}

functionattack()publicpayable{

addresspayableaddr=payable(address(etherGame));

selfdestruct(addr);

}

}

分析智能合約中存在問題,并說明危害;

創建新的智能合約,修復其中問題;

說明修復內容并測試其智能合約。

4

模塊二:智能合約開發與測試(30分)

選手完成本模塊的任務后,將任務中設計結果、運行代碼、運行結果等截圖

粘貼至客戶端桌面【區塊鏈技術應用賽\重命名為工位號\模塊二提交結果.docx】

中對應的任務序號下。

任務2-1:智能合約開發(20分)

使用Solidity語言完成智能合約開發、部署和調用,要求如下:

1.個人簽章信息接口編碼

(1)編寫個人簽章智能合約的實體接口,完成實體通用數據的初始化,實

現簽章和用戶實體信息上鏈的功能;

structSealInfo{

//①姓名

//②身份證

//③印章數據

//④創建印章時間戳

}

(2)編寫簽章信息上鏈的接口,實現Seal合約的構造函數;

//@dev構造函數

//@param_name姓名

//@param_cardId身份證號碼

//@param_data個人印章數據

//@param_datetime賬戶注冊時間

constructor(string_name,string_cardId,string_data,string

_datetime)public{

//①用戶姓名

//②用戶身份ID

//③用戶數據

//④時間戳

isUsed=true;

5

}

(3)基于給定的智能合約代碼以及注釋,完成ElectronicSeal合約判斷多

人簽章文件編號是否存在的函數。

//@dev判斷多人簽名文件編號是否存在

//@param_code簽章文件編號

//@returnbooltrue:存在false:不存在

functionisExistMultiCode(string_code)viewinternal

returns(bool){

//①遍歷所有多人簽章文件編號并與傳入簽章文件編號參數進行比較

//②返回不存在

}

2.電子印章接口編碼(8分)

(1)基于給定的智能合約代碼以及注釋,完成ElectronicSeal合約獲取

多人簽章信息函數(3分)

//@dev獲取多人簽章信息

//@param_code簽章文件編號

//@return(簽章文件摘要、多人簽章發起人賬戶地址、簽章文件編號、

簽章人數、簽章賬戶地址列表)

functiongetMultiSingInfo(string_code)publicview

onlyPromoterOrSingerreturns(string,address,string,uint,address[]

memory){

//①獲取多人簽章合約對象實例

//②返回多人簽章信息

}

(2)基于給定的智能合約代碼以及注釋,完成ElectronicSeal合約多人簽

章函數(5分)

//@dev多人簽章

//@param_address簽章人賬戶地址

6

//@param_hash簽章文件摘要

//@param_datatime簽章時間戳

functiondoMultiSign(address_address,string_hash,string

_datetime)publiconlyPromoter{

//①判斷傳入的簽章人賬戶地址不能為空

//②獲取多人簽章合約對象實例

//③獲取當前等待簽章賬戶地址

//④判斷合約調用者是否為等待簽章人賬戶地址

//⑤進行簽章

}

3.合約編譯、部署和調用

(1)解決代碼錯誤和警告,正確編譯并部署合約,成功獲取部署的合約地

址和abi;

(2)調用區塊鏈電子簽章智能合約的接口,完整驗證業務流程。

任務2-2:智能合約測試(10分)

根據已完成的智能合約,針對開發功能開展相關合約測試工作,具體工作內

容如下:

1.生成測試文件,在Remix中的合約測試目錄tests中生成

ElectionSeal_Test.sol的測試文件

編譯并部署合約,配置項目的ElectionSeal_Test.sol測試腳本文件。

2.注釋測試文件中自動生成的測試函數checkSuccess()、

checkSuccess2()、checkFailure()、checkSenderAndValue()相關代碼,運行測

試按鈕

基于remix的測試項目,將checkSuccess()、checkSuccess2()、

checkFailure()、checkSenderAndValue()相關代碼注釋掉并進行相關測試;

3.實例化

在測試文件中定義測試ElectronicSeal合約變量并在beforeAll()函數中

進行實例化。

4.創建測試函數測試印章賬戶數量

7

基于remix的測試項目,補全位于test文件夾中的ElectionSeal_Test.sol

合約測試文件,添加測試用例,補全測試印章賬戶數量函數。

5.創建測試函數測試印章賬戶簽章

基于remix的測試項目,補全位于test文件夾中ElectionSeal_Test.sol

合約測試文件,添加測試用例,創建測試函數測試印章賬戶簽章。

8

模塊三:區塊鏈應用系統開發(30分)

任務3-1:區塊鏈電子簽章前端功能開發(10分)

1.請基于前端系統的開發模板,在注冊頁面register.html文件中添加對

應的代碼邏輯,實現對前端系統的注冊功能,并測試功能完整性,示例頁面如

下;

題目的具體要求如下:

(1)注冊身份證號碼的數據實現雙向綁定

(2)注冊按鈕的事件綁定

(3)將用戶輸入的注冊信息向后端系統發送注冊請求

register.html

代碼片段1:

<divclass="input-group"style="width:80%">

<spanclass="input-group-addonglyphiconglyphicon-list-alt"

id="basic-addon1"></span>

<inputtype="text"class="form-control"placeholder="身份證號碼

(必填)"autocomplete="off"選手填寫部分>

</div><br/>

代碼片段2:

<divclass="modal-footer"style="margin-left:150px;">

9

<divclass="form-group"style="width:50%">

<!--TODO:請補充注冊按鈕的事件綁定代碼-->

<buttontype="button"class="btnbtn-success

form-control"選手填寫部分>確定</button>

</div>

</div>

代碼片段3:

methods:{

submit(){

if(this.user.username==''){

alert("用戶名不能為空")

return

}

if(this.user.password==''){

alert("密碼不能為空")

return

}

if(this.user.chainAccount==''){

alert("區塊鏈賬戶地址不能為空")

return

}

if(==''){

alert("姓名不能為空")

return

}

if(this.user.cardId==''){

alert("身份證號碼不能為空")

return

10

}

if(this.user.phone==''){

alert("電話號碼不能為空")

return

}

選手填寫部分

}

}

2.請基于前端系統的開發模板,在登錄頁面login.html文件中添加對應

的代碼邏輯,實現對前端系統的登錄功能,并測試功能完整性,示例頁面如下:

本題目的具體要求如下:

(1)登錄按鈕的事件綁定

(2)用戶輸入的登錄用戶名和密碼通過雙向綁定存放在user中

(3)登錄成功頁面跳轉到main.html頁面

(4)本地保存登錄狀態信息(token)

login.html

代碼片段1:

<divclass="modal-footer"style="margin-left:100px;">

<divclass="form-group"style="width:75%">

<buttontype="button"class="btnbtn-primary

form-control"選手填寫部分>確定</button>

</div>

</div>

11

代碼片段2:

//創建Vue實例

newVue({

el:'#app',//el用于指定當前Vue實例為哪個容器服務,值通常

為css選擇器字符串

data:{//data中用于存儲數據,數據供el所指定的容器去使用,

值我們暫時先寫成一個對象。

user:{

選手填寫部分

},

tip:false,

msg:""

},

methods:{

submit(){

if(this.user.username==''){

this.msg="用戶名不能為空"

this.tip=true

setTimeout(()=>{

this.tip=false

},1000)

return

}

if(this.user.password==''){

this.msg="密碼不能為空"

this.tip=true

setTimeout(()=>{

this.tip=false

},1000)

12

return

}

axios.post("http://localhost/user/login",

this.user).then(response=>{

if(response.data.resultCode==200){

this.msg="登錄成功"

this.tip=true

setTimeout(()=>{

選手填寫部分

},1000)

選手填寫部分

}else{

this.msg="登錄失敗"

this.tip=true

setTimeout(()=>{

this.tip=false

},1000)

}

})

},

}

})

3.請基于前端系統的開發模板,在個人印章頁面myseal.html文件中添加對

應的頁面代碼邏輯,實現對前端系統的個人印章功能,并測試功能完整性,示例

頁面如下:

13

具體要求如下:

(1)注銷按鈕的事件綁定

(2)注銷時清除本地保存的登錄狀態信息(token)

(3)發送請求到后端系統攜帶本地保存的登錄狀態信息(token)

(4)接收后端系統發送過來的印章圖片信息

myseal.html

代碼片段1:

<divclass="container-fluid">

<divclass="navbar-header">

<aclass="navbar-brand"href="#"><imgalt="Brand"

src="../images/logo.png"style="height:50px;"></a>

</div>

<imgalt="Brand"src="../images/main.png"style="height:

40px;margin-top:20px;">

<ulclass="navnavbar-nav"style="float:right;">

<li><ahref="../index.html"><buttontype="button"

class="btnbtn-success"選手填寫部分>注銷</button></a></li>

</ul>

</div>

代碼片段2:

methods:{

logout(){

選手填寫部分

}

14

},

代碼片段3:

//請求發前攔截,header中添加token

erceptors.request.use(config=>{

config.headers.Authorization=選手填寫部分

returnconfig

})

代碼片段4:

axios.get("http://localhost/user/seal").then(response=>{

if(response.data.resultCode==200){

this.seal=選手填寫部分

}

})

4.請基于前端系統的開發模板,請在文件簽章頁面signature.html文件中

添加對應的頁面代碼邏輯,實現對前端系統的文件簽章業務功能,并測試功能完

整性,示例頁面如下:

具體要求如下:

(1)創建canvas畫布實例

(2)向后端系統發送簽章請求url

(3)向后端系統獲取個人印章請求url

(4)接收后端系統發送過來的印章圖片信息

signature.html

15

代碼片段1:

signature(){

if(this.status==0){

this.msg="請上傳文檔"

this.tip=true

setTimeout(()=>{

this.tip=false

},1000)

return

}

this.status=2

varcanvas;

canvas=選手填寫部分

canvas.width=$("#poster").width()

canvas.height=$("#poster").height()

varcontext=canvas.getContext("2d");

context.rect(0,0,canvas.width,canvas.height);

context.fillStyle="#fff";

context.fill();

代碼片段2:

uploadSeal(){

if(this.status!=2){

this.msg="文檔未上傳或未簽章"

this.tip=true

setTimeout(()=>{

this.tip=false

},1000)

16

return

}

varposterImg=document.getElementById('poster');

varimgBase64=posterImg.getAttribute("src");

axios.post("選手填寫部分",

{

"filename":this.filename,

"imgBase64":imgBase64,

}

).then(response=>{

if(response.data.resultCode==200){

this.msg="簽章文檔上鏈成功"

this.tip=true

setTimeout(()=>{

this.tip=false

window.location.href="main.html";

},1000)

}else{

this.msg="簽章文檔上鏈失敗"

this.tip=true

setTimeout(()=>{

this.tip=false

},1000)

}

})

}

代碼片段3:

mounted(){

17

//請求發前攔截,header中添加token

erceptors.request.use(request=>{

request.headers.Authorization=

localStorage.getItem("Authorization")

returnrequest

})

//響應攔截器(認證授權)

erceptors.response.use(response=>{

if(response.data.resultCode==401){

//跳轉頁面

window.location.href="login.html";

}

returnresponse

})

//TODO:【5-1-4-3】請補充向服務器發送獲取個人印章請求代碼

axios.get("選手填寫部分").then(response=>{

if(response.data.resultCode==200){

this.seal=選手填寫部分

}

})

}

5.請基于前端系統的開發模板,在文件驗章頁面verity.html文件中添加

對應的頁面代碼邏輯,實現對前端系統的文件驗章業務功能,并測試功能完整

性,示例頁面如下:

18

具體要求如下:

(1)將驗章結果數據顯示在頁面中

(2)向后端系統發送驗章請求并攜帶驗章文件數據

verity.html

代碼片段1:

<divclass="modal-dialog"role="document">

<divclass="modal-content">

<divclass="modal-header">

<buttontype="button"class="close"

data-dismiss="modal"aria-label="Close"><span

aria-hidden="true">×</span></button>

<h4class="modal-title"

id="myModalLabel">簽章信息</h4>

</div>

<divclass="modal-body">

<pstyle="margin-left:50px;">

<label>姓名:</label>選手填寫部

</p>

<pstyle="margin-left:50px;">

<label>身份證號碼:</label>選手

填寫部分

19

</p>

<pstyle="margin-left:50px;">

<label>區塊鏈賬戶地址:</label>

選手填寫部分

</p>

<pstyle="margin-left:50px;">

<label>文件名稱:</label>選手填

寫部分

</p>

<pstyle="margin-left:50px;">

<label>文件編碼:</label>選手填

寫部分

</p>

<pstyle="margin-left:50px;">

<label>簽章時間:</label>選手填

寫部分

</p>

</div>

<divclass="modal-footer"style="width:

300px;">

<buttontype="button"class="btn

btn-success"data-dismiss="modal"@click="finish">確定</button>

</div>

</div>

</div>

代碼片段2:

asyncverify(event){//同步發送axios請求(獲取數據后彈出模態框)

if(this.status==0){

this.msg="請上傳文檔"

this.tip=true

20

event.stopPropagation()//阻止事件冒泡(防止彈出

模態框)

setTimeout(()=>{

this.tip=false

},1000)

return

}

awaitaxios.post("選手填寫部分",

{"imgBase64":this.contract}).then(response=>{

if(response.data.resultCode==200){

this.verifyInfo=response.data.data

}

})

},

任務3-2:區塊鏈應用系統后端開發(20分)

1.請基于后端系統的開發模板,在userService.java文件中補充對應的

代碼邏輯,完成后端代碼邏輯,實現對后端系統的注冊功能,并測試功能完整

性,題目具體要求如下:

(1)根據用戶注冊信息中的用戶名和賬戶地址從數據庫中查詢賬戶信息是否

存在

(2)將用戶密碼進行md5加密操作

(3)將電子印章字節數組轉為字符串

(4)將用戶注冊信息寫入數據庫匯總

userService.java

代碼片段1:

publicbooleanregister(RegisterBeanregisterBean){

21

//校驗用戶名或賬戶地址是否重復

QueryWrapper<UserEntity>queryWrapper=newQueryWrapper<>();

queryWrapper.eq("username",registerBean.getUsername())

.or().eq("chain_account",registerBean.getChainAccou

nt());

UserEntityuserOne=選手填寫部分

if(userOne!=null){

("注冊失敗:用戶名或賬戶地址重復");

returnfalse;

}

//拷貝對象

UserEntityuserEntity=newUserEntity();

BeanUtils.copyProperties(registerBean,userEntity);

userEntity.setPassword(選手填寫部分);//md5加密密碼

//生成印章(Base64)

byte[]buffer=Seal.getSealImg(registerBean.getUsername(),

registerBean.getName());

Encoderencode=Base64.getEncoder();

StringsealImg=選手填寫部分

userEntity.setSealImg(sealImg);

//用戶注冊信息上鏈

ListfuncParams=newArrayList<>();

funcParams.add(registerBean.getChainAccount());

22

funcParams.add(registerBean.getName());

funcParams.add(registerBean.getCardId());

funcParams.add(String.valueOf(System.currentTimeMillis()));

JSONObjectres=HttpUtils.writeContract("addSealAccount",

funcParams);

if(res==null){

("注冊失敗:用戶注冊信息上鏈失敗");

returnfalse;

}

intresult=選手填寫部分

returnresult>0?true:false;

}

2.請基于后端系統的開發模板,補充代碼完成對應的后端代碼邏輯,實現

后端系統的登錄功能,并測試功能完整性,具體要求如下:

(1)登錄成功向前端系統返回登錄狀態信息(token)

(2)添加登錄的用戶名和密碼兩個數據庫查詢條件

(3)根據登錄的用戶名和密碼到數據庫中進行查詢操作

UserController.java

代碼片段1:

publicAjaxResult<String>login(@RequestBodyLoginBeanloginBean){

(loginBean.toString());

if(userService.isLogin(loginBean)){

//創建

Stringtoken=

TokenUtil.sign(loginBean.getUsername(),String.valueOf(System.curren

tTimeMillis()));

AjaxResult<String>result=newAjaxResult<>(200,"login

23

ok");

result.setData(選手填寫部分);

returnresult;

}else{

returnnewAjaxResult<String>(403,"loginfail");

}

}

UserService.java

代碼片段1:

publicbooleanisLogin(LoginBeanloginBean){

QueryWrapper<UserEntity>queryWrapper=newQueryWrapper<>();

loginBean.setPassword(SecureUtil.md5(loginBean.getPassword()));//md

5加密密碼

//TODO:請補充queryWrapper添加用戶名和密碼兩個數據庫查詢條

件代碼

queryWrapper.eq(選手填寫部分)

.eq(選手填寫部分);

//TODO:請補充數據庫查詢登錄用戶信息代碼

UserEntityuserEntity=選手填寫部分

returnuserEntity!=null?true:false;

}

3.請基于后端系統的開發模板,補充代碼完成對應的后端代碼邏輯,實現

對后端系統的賬戶信息查看功能,并測試功能完整性,具體要求如下:

24

(1)從前端系統發送的請求頭中獲取登錄狀態信息(token)

(2)根據登錄狀態信息(token)獲取登錄用戶名

(3)根據用戶名查詢數據庫

(4)將查詢結果數據封裝到RegisterBean中

UserController.java

代碼片段1:

@ApiOperation(value="用戶信息",notes="獲取用戶詳細信息")

@GetMapping("/user/info")

publicAjaxResult<RegisterBean>getUserInfo(HttpServletRequest

request){

Stringtoken=選手填寫部分

Stringusername=選手填寫部分

RegisterBeanregisterBean=userService.getUser(username);

AjaxResult<RegisterBean>result=newAjaxResult<>(200,

"ok");

result.setData(registerBean);

returnresult;

}

UserService.java

代碼片段1:

publicRegisterBeangetUser(Stringusername){

QueryWrapper<UserEntity>queryWrapper=newQueryWrapper<>();

queryWrapper.eq("username",username);

UserEntityuserEntity=選手填寫部分

RegisterBeanregisterBean=newRegisterBean();

25

選手填寫部分

returnregisterBean;

}

4.請基于后端系統的開發模板,補充代碼完成對應的后端代碼邏輯,實現

對后端系統的文件簽章功能,并測試功能完整性,具體要求如下:

(1)驗證登錄狀態信息(token)

(2)獲取簽章文件的UUID編碼

(3)獲取驗章文件摘要(hash)

(4)將驗章文件信息寫入智能合約中

TokenInterceptor.java

代碼片段1:

publicbooleanpreHandle(HttpServletRequestrequest,

HttpServletResponseresponse,Objecthandler)throwsException{

if("OPTIONS".equals(request.getMethod())){

response.setStatus(HttpServletResponse.SC_OK);

returntrue;

}

response.setCharacterEncoding("utf-8");

Stringtoken=request.getHeader("Authorization");

("token:"+token);

if(token!=null){

booleanresult=選手填寫部分

if(result){

("通過攔截器");

returntrue;

26

}

}

response.setCharacterEncoding("UTF-8");

response.setContentType("application/json;charset=utf-8");

PrintWriterout=null;

try{

JSONObjectjson=newJSONObject();

json.put("message","認證失敗,未通過攔截器");

json.put("resultCode","401");

response.getWriter().append(json.toJSONString());

("認證失敗,未通過攔截器");

}catch(Exceptione){

e.printStackTrace();

response.sendError(500);

returnfalse;

}

returnfalse;

}

SealService.java

代碼片段1:

publicbooleansignature(ContractBeancontractBean,String

chainAccount){

//獲取簽名文檔uuid編碼

Stringcode=選手填寫部分

SealEntitysealEntity=newSealEntity();

BeanUtils.copyProperties(contractBean,sealEntity);

String[]str=contractBean.getFilename().split("\\.");

sealEntity.setFilename(str[0]);

27

sealEntity.setType(str[1]);

sealEntity.setCode(code);

//簽章記錄上鏈

try{

//獲取印章文檔Hash值

MessageDigestmessageDigest=選手填寫部分

byte[]bytes=

messageDigest.digest(contractBean.getImgBase64().getBytes("UTF-8"))

;

Stringhash=Hex.toHexString

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論