提交 0fbeb9e9 编写于 作者: huangwensu's avatar huangwensu

修改组件

上级 18969e08
<template>
<div>协议</div>
</template>
<script>
export default {
data() {
},
created() {
},
methods: {
}
}
</script>
\ No newline at end of file
<template>
<div class="lux-cell lux-field">
<div v-if="leftIcon" class="lux-field__left-icon">
<i class="lux-icon left-icon" :class="leftIcon"></i>
</div>
<div v-if="label" class="lux-field__label">
<span>{{ label }}</span>
</div>
<div class="lux-field__value">
<div class="lux-field__body">
<input
class="lux-field__control"
ref="input"
:type="type"
:value="value"
:placeholder="$attrs.placeholder"
:maxlength="$attrs.maxlength || maxlength"
v-on="listeners"
>
<i v-if="showClear" class="lux-icon lux-icon-clear" @click="onClear"></i>
<div v-if="rightIcon" class="lux-field__right-icon">
<i class="lux-icon right-icon" :class="rightIcon" @click="onClickRightIcon"></i>
</div>
<slot name="button" />
<slot name="img" />
</div>
</div>
</div>
</template>
<script>
import { isDef, preventDefault, isIOS, getRootScrollTop } from './util';
export default {
name: 'Field',
props: {
label: {
type: String,
default: null
},
type: {
type: String,
default: 'text'
},
value: {
type: [String, Number],
default: ''
},
clearable: {
type: Boolean,
default: false
},
leftIcon: {
type: String,
default: null
},
rightIcon: {
type: String,
default: null
}
},
data() {
return {
focused: false,
maxlength: 1000
}
},
computed: {
showClear() {
return this.clearable && this.focused && this.value !== '' && isDef(this.value);
},
listeners() {
return {
...this.$listeners,
input: this.onInput,
// keypress: this.onKeypress,
focus: this.onFocus,
blur: this.onBlur
}
}
},
methods: {
slots(name = 'default', props) {
const { $slots, $scopedSlots } = this;
if ($scopedSlots[name]) {
return $scopedSlots[name](props);
}
return $slots[name];
},
focus() {
this.$refs.input && this.$refs.input.focus();
},
blur() {
this.$refs.input && this.$refs.input.blur();
},
format(target = this.$refs.input) {
let { value } = target;
const { maxlength } = this.$attrs;
if (this.type === 'number' && isDef(maxlength) && value.length > maxlength) {
value = value.slice(0, maxlength);
target.value = value;
}
return value;
},
onInput(event) {
this.$emit('input', this.format(event.target));
},
onFocus(event) {
this.focused = true;
this.$emit('focus', event);
},
onBlur(event) {
setTimeout(() => {
this.focused = false;
this.$emit('blur', event);
if (isIOS()) {
window.scrollTo(0, getRootScrollTop());
}
}, 0);
},
onClear(event) {
preventDefault(event);
this.$emit('input', '');
this.$emit('clear');
},
onClickRightIcon(event) {
this.$emit('click-right-icon');
}
}
}
</script>
<style lang="less">
.lux-field {
position: relative;
display: flex;
width: 100%;
overflow: hidden;
box-sizing: border-box;
color: #373839;
font-size: 16px;
line-height: 12px;
background-color: #F8F9FA;
border-radius: 50px;
padding: 12px 15px;
padding-right: 0;
.lux-icon {
display: block;
background-size: contain;
background-repeat: no-repeat;
margin-right: 15px;
}
.lux-field__left-icon,
.lux-field__right-icon {
.lux-icon {
width: 20px;
height: 20px;
}
}
.lux-field__left-icon {
margin-right: 12.5px;
.lux-icon-phone {
background-image: url(./images/lux-icon-phone.png);
}
.lux-icon-pwd {
background-image: url(./images/lux-icon-pwd.png);
}
.lux-icon-otp {
background-image: url(./images/lux-icon-otp.png);
}
.lux-icon-sms {
background-image: url(./images/lux-icon-sms.png);
}
}
.lux-field__right-icon {
.lux-icon-spwd {
background-image: url(./images/lux-icon-spwd.png);
}
.lux-icon-hpwd {
background-image: url(./images/lux-icon-hpwd.png);
}
}
.lux-field__value {
flex: 1;
color: #373839;
overflow: hidden;
text-align: right;
position: relative;
vertical-align: middle;
}
.lux-field__body {
display: flex;
align-items: center;
.lux-icon-clear {
flex-shrink: 0;
width: 16px;
height: 16px;
background-image: url(./images/lux-icon-clear.png);
}
}
.lux-field__control {
border: 0;
margin: 0;
padding: 0;
width: 100%;
resize: none;
display: block;
color: #373839;
box-sizing: border-box;
background-color: transparent;
font-size: 16px;
height: 19px;
line-height: 19px;
&::placeholder {
color: #C7C8C9;
}
}
input:-webkit-autofill {
background-color: #fff;
background-image: none;
}
input:-webkit-autofill {
-webkit-box-shadow: 0 0 0px 1000px #fff inset !important;
}
.lux-field__button {
flex-shrink: 0;
margin-right: 15px;
}
}
</style>
\ No newline at end of file
import PicaH5Login from './login.vue';
PicaH5Login.install = function(Vue) {
Vue.component(PicaH5Login.name, PicaH5Login);
};
export default PicaH5Login;
\ No newline at end of file
<template>
<div class="pica-h5-login-container">
<div class="nav-tab">
<div
v-for="tab in tabs"
:key="tab.value"
:class="['tab', active == tab.value ? 'tab-active' : '']"
@click="toggleTab(tab.value)"
>
{{tab.label}}
</div>
<i v-if="close" class="lux-close" @click="onClose"></i>
</div>
<div class="login-content">
<field
v-model="mobile"
left-icon="lux-icon-phone"
placeholder="手机号"
type="tel"
maxlength="11"
:clearable="true"
@keyup="onKeyUp"
/>
<div class="captcha-field" v-show="active == 1">
<field
v-model="captchaAnswer"
left-icon="lux-icon-sms"
placeholder="图形验证码"
maxlength="5"
>
</field>
<div class="captchaImg">
<img
:src="captchaImg"
@click="getCaptcha"
slot="img"
>
</div>
</div>
<field
v-show="active == 1"
v-model="authCode"
left-icon="lux-icon-otp"
placeholder="验证码"
maxlength="6"
>
<div
slot="button"
class="lux-field__button send-otp"
:class="[otpDisabled ? 'disabled' : '']"
@click="sendOtp"
>
{{sendSMS}}
</div>
</field>
<field
v-show="active == 2"
v-model="password"
left-icon="lux-icon-pwd"
placeholder="密码"
:type="pwdType"
:right-icon="rightIcon"
@click-right-icon="togglePwd"
/>
<div class="btn-confirm" @click="confirm">登录</div>
</div>
<loading v-if="loading" class="login-van-loading" color="white" />
</div>
</template>
<script>
import axios from 'axios';
import Field from './field.vue';
import { Toast, Loading } from 'vant';
import './prototype';
import { sendEncryptRequest } from './utils/encrypt/encryptEnter';
import { getTerminalType, detectOS } from './utils/getDeviceInfo';
export default {
name: 'PicaH5Login',
props: {
baseUrl: {
type: String,
default: ''
},
close: {
type: Boolean,
default: false
},
closeCall: {
type: Function,
default: function() {}
},
loginCall: {
type: Function,
default: function() {}
}
},
components: {
Field,
Loading
},
data() {
return {
active: 1,
tabs: [
{
label: '验证码登录',
value: 1
},
{
label: '密码登录',
value: 2
}
],
loading: false,
regMobile: /^1[3456789]\d{9}$/,
pwdType: 'password', // text
rightIcon: 'lux-icon-hpwd', // lux-icon-spwd
sms: '获取验证码',
sendSMS: '获取验证码',
// sendImgSMS: '获取图形验证码',
otpDisabled: true, // 图形验证码 disabled
otpDisabledCaptcha: true, // 验证码 disabled
countdownFn: null,
countTimer: 60,
tipEl: null,
tipTimer: 1500,
mobile: '',
authCode: '',
password: '',
captchaImg: '',
captchaToken: '',
captchaAnswer: '',
config: {}
}
},
computed: {
mobileFlag() {
const { regMobile, mobile } = this;
return !regMobile.test(mobile);
}
},
watch: {
mobile(val) {
const { active, mobileFlag, countdownFn } = this;
if (active === 1) {
if (countdownFn !== null) {
this.otpDisabled = true;
} else {
this.otpDisabled = mobileFlag;
}
}
}
},
created() {
const { baseUrl } = this;
// this.config = {
// method: 'GET',
// baseURL: baseUrl,
// headers: {
// sysCode: 28,
// 'X-Requested-With': 'XMLHttpRequest',
// 'Content-Type': 'application/json;charset=UTF-8'
// },
// timeout: 10000,
// }
let deviceInfo = this.getDeviceInfo();
this.config = {
method: 'GET',
baseURL: baseUrl,
headers: {
'X-Requested-With': 'XMLHttpRequest',
'Content-Type': 'application/json;charset=UTF-8',
'productType': 1, // 1表示云鹊医产品系
'sourceType': 4, // 4表示H5登录
'deviceInfo': deviceInfo
},
timeout: 10000,
}
this.getCaptcha()
},
methods: {
toggleTab(val) {
this.active = val;
if (val === 1) {
const { mobileFlag, countdownFn } = this;
this.otpDisabled = countdownFn !==null ? true : mobileFlag;
}
},
getDeviceInfo() {
let deviceInfo = { "app_channel": "", "app_mac": "", "app_uuid": "", "app_version": "", "device_brand": "", "device_ip": "", "device_model": "", "device_net": "", "device_ops": "", "resolution_wh": "", "system_level": "", "device_type": "" };
try{
let terminalType = getTerminalType();
let OS = detectOS();
deviceInfo.device_brand = terminalType;
deviceInfo.system_level = OS;
}catch(err){
console.log('deviceInfo err>>>> ', err)
}
deviceInfo = JSON.stringify(deviceInfo);
return deviceInfo;
},
// 图形验证码
getCaptcha(){
const { config } = this;
// 获取图形验证码 ajax
axios({ ...config, url: '/account/account/captcha' }).then(res=>{
if(res.status && res.status === 200) {
res = res.data;
}
if(res.code==='000000'){
this.captchaImg = `data:image/png;base64,${res.data.content}`
this.captchaToken = res.data.token
}else{
Toast({
message: res.message,
duration: this.tipTimer
});
}
});
},
onClose() {
this.$emit('close-call');
},
togglePwd() {
const { pwdType } = this;
if (pwdType === 'password') {
this.pwdType = 'text';
this.rightIcon = 'lux-icon-spwd';
} else {
this.pwdType = 'password';
this.rightIcon = 'lux-icon-hpwd';
}
},
onKeyUp(e) {
this.mobile = e.target.value.replace(/\D/g, '');
},
// 短信验证码
sendOtp() {
const _this = this;
let countdown;
const { config, mobile, otpDisabled, mobileFlag, countTimer, captchaAnswer } = this;
if (otpDisabled || mobileFlag) return;
if(captchaAnswer==''){
Toast({
message: '请输入图形验证码',
duration: this.tipTimer
});
return;
}
// 发送短信验证码 ajax post<<<<
let data = {
mobile: mobile,
flag: 0,
captchaToken: this.captchaToken,
captchaAnswer: this.captchaAnswer
};
let sendMsgCodeCb = data => {
axios({ ...config, method: 'POST', url: '/account/account/authCode', data}).then(res=>{
if(res.status && res.status === 200) {
res = res.data;
}
if(res.code==='000000'){
countdown = this.countDown(countTimer);
this.countdownFn = setInterval(countdown, 1000);
this.otpDisabled = true;
countdown();
}else{
this.getCaptcha();
this.captchaAnswer = '';
Toast({
message: res.message,
duration: this.tipTimer
});
}
});
}
sendEncryptRequest(data, sendMsgCodeCb, _this.config);
},
countDown(counter) {
const _this = this;
return function() {
if (0 >= counter--) {
const { countdownFn, mobileFlag, sms } = _this;
clearInterval(countdownFn);
_this.countdownFn = null;
_this.sendSMS = sms;
_this.otpDisabled = mobileFlag;
} else {
_this.sendSMS = `${counter}秒后重试`;
}
}
},
confirm() {
const { active, mobileFlag, mobile, captchaAnswer, authCode, password, tipTimer } = this;
let params = { mobile: mobile, authCode, password };
if (mobileFlag) {
Toast({ message: '请输入正确手机号', duration: tipTimer });
return;
}
if (active == 1 && captchaAnswer === '') {
Toast({ message: '请输入图形验证码', duration: tipTimer });
return;
}
if (active == 1 && authCode === '') {
Toast({ message: '请输入验证码', duration: tipTimer });
return;
}
if (active == 2 && password === '') {
Toast({ message: '请输入密码', duration: tipTimer });
return;
}
active == 1 ? delete params.password : delete params.authCode;
if (active != 1 && params.password) {
params.password = `${params.password}`.MD5(32).toUpperCase();
}
this.submit(params);
},
submit(data) {
const _this = this;
const { config, tipTimer, active } = _this;
// const url = active == 1 ? '/account/account/login-register' : '/account/account/login'; // old
const url = active == 1 ? '/account/account/login-register/v1' : '/account/login'; // encrypt new
const unionid = window.sessionStorage.getItem('unionid');
if (unionid !== null) { data.unionid = unionid; }
_this.loading = true;
let submitCb = data => {
console.log('data>>>>> ', data)
axios({ ...config, method: 'POST', url, data })
.then(res => {
_this.loading = false;
if (res.status === undefined) {
_this.doResponse(res);
} else {
if (res.status === 200) {
res = res.data;
_this.doResponse(res);
} else {
Toast({ message: '系统异常', duration: tipTimer });
}
}
})
.catch(err => {
Toast({ message: '系统异常', duration: tipTimer });
_this.loading = false;
});
};
sendEncryptRequest(data, submitCb, _this.config);
},
doResponse(res) {
const _this = this;
const { tipTimer } = _this;
if (res && res.code === '000000') {
if(res.data && res.data.token){
Toast({ message: '登录成功', duration: tipTimer });
// _this.$emit('login-call', res.data);
_this.$emit('login-call', res.data.token);
}else{
Toast({ message: '系统异常', duration: tipTimer });
}
} else {
const message = res && res.message ? res.message : '系统异常';
Toast({ message, duration: tipTimer });
}
}
}
}
</script>
<style lang="less">
// @import './login.less'
.captcha-field{
width: 100%;
display: flex;
justify-content: space-around;
align-items: center;
.lux-cell{
width: 170px;
display: flex;
align-items: center;
}
.captchaImg{
width: 114px;
height: 44px;
margin-left: 10px;
img{
width: 100%;
height: 100%;
display: block;
border-radius: 50px;
}
}
.lux-field__control {
height: 24px;
line-height: 24px;
}
.left-icon{
height: 24px;
}
}
.van-popup .pica-h5-login-container {
border-radius: 3px;
}
.pica-h5-login-container {
width: 345px;
background: #fff;
border-radius: 3px;
font-family: PingFangSC-Semibold;
box-shadow: 0 0 5px rgba(237, 237, 237, 1);
user-select: none;
.nav-tab {
position: relative;
display: flex;
justify-content: space-around;
align-items: center;
border-bottom: 1PX solid #F0F1F2;
padding: 0 25px;
.tab {
flex: 1;
font-size: 18px;
font-weight: 400;
color: #676869;
position: relative;
height: 54px;
line-height: 54px;
text-align: center;
&.tab-active {
font-weight: 600;
color: #373839;
&::after {
content: "";
position: absolute;
width: 10px;
height: 3px;
border-radius: 1.5px;
background: #449284;
bottom: 2px;
left: 50%;
margin-left: -5px;
}
}
}
.lux-close {
position: absolute;
width: 25px;
height: 25px;
top: 15.5px;
right: 10px;
background-image: url(./images/lux-icon-close.png);
background-repeat: no-repeat;
background-size: contain;
}
}
.login-content {
// margin-top: 22.5px;
padding: 22.5px 25px 10px;
> div {
margin-bottom: 20px;
}
.send-otp {
font-size: 16px;
color: #449284;
&.disabled {
color: #979899;
}
}
.btn-confirm {
background: linear-gradient(135deg, rgba(141,197,187,1) 0%, rgba(68, 146, 132, 1) 100%);
box-shadow: 0px 1px 6px 0px rgba(68, 146, 132, 0.4);
border-radius: 25px;
font-size: 17px;
color: #fff;
font-weight: 500;
padding: 13px 0;
text-align: center;
}
}
}
.lux-toast {
position: fixed;
top: 50%;
left: 50%;
padding: 8px 12px;
min-width: 48px;
max-width: 70%;
box-sizing: content-box;
width: fit-content;
color: #fff;
font-size: 14px;
line-height: 20px;
white-space: pre-wrap;
text-align: center;
word-break: break-all;
background-color: rgba(50, 50, 51, 0.88);
border-radius: 4px;
transform: translate3d(-50%, -50%, 0);
}
.van-loading.login-van-loading {
position: fixed;
top: 40%;
left: 50%;
margin-left: -30px;
width: 60px;
height: 60px;
padding: 10px;
border-radius: 3px;
background-color: rgba(0, 0, 0, 0.5);
z-index: 1000;
}
</style>
\ No newline at end of file
String.prototype.MD5 = function(bit) {
var sMessage = this;
function RotateLeft(lValue, iShiftBits) {
return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));
}
function AddUnsigned(lX, lY) {
var lX4, lY4, lX8, lY8, lResult;
lX8 = (lX & 0x80000000);
lY8 = (lY & 0x80000000);
lX4 = (lX & 0x40000000);
lY4 = (lY & 0x40000000);
lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);
if (lX4 & lY4) return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
if (lX4 | lY4) {
if (lResult & 0x40000000) return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
else return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
} else return (lResult ^ lX8 ^ lY8);
}
function F(x, y, z) {
return (x & y) | ((~x) & z);
}
function G(x, y, z) {
return (x & z) | (y & (~z));
}
function H(x, y, z) {
return (x ^ y ^ z);
}
function I(x, y, z) {
return (y ^ (x | (~z)));
}
function FF(a, b, c, d, x, s, ac) {
a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
return AddUnsigned(RotateLeft(a, s), b);
}
function GG(a, b, c, d, x, s, ac) {
a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
return AddUnsigned(RotateLeft(a, s), b);
}
function HH(a, b, c, d, x, s, ac) {
a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
return AddUnsigned(RotateLeft(a, s), b);
}
function II(a, b, c, d, x, s, ac) {
a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
return AddUnsigned(RotateLeft(a, s), b);
}
function ConvertToWordArray(sMessage) {
var lWordCount;
var lMessageLength = sMessage.length;
var lNumberOfWords_temp1 = lMessageLength + 8;
var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64;
var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16;
var lWordArray = Array(lNumberOfWords - 1);
var lBytePosition = 0;
var lByteCount = 0;
while (lByteCount < lMessageLength) {
lWordCount = (lByteCount - (lByteCount % 4)) / 4;
lBytePosition = (lByteCount % 4) * 8;
lWordArray[lWordCount] = (lWordArray[lWordCount] | (sMessage.charCodeAt(lByteCount) << lBytePosition));
lByteCount++;
}
lWordCount = (lByteCount - (lByteCount % 4)) / 4;
lBytePosition = (lByteCount % 4) * 8;
lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);
lWordArray[lNumberOfWords - 2] = lMessageLength << 3;
lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;
return lWordArray;
}
function WordToHex(lValue) {
var WordToHexValue = "",
WordToHexValue_temp = "",
lByte, lCount;
for (lCount = 0; lCount <= 3; lCount++) {
lByte = (lValue >>> (lCount * 8)) & 255;
WordToHexValue_temp = "0" + lByte.toString(16);
WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2);
}
return WordToHexValue;
}
var x = Array();
var k, AA, BB, CC, DD, a, b, c, d
var S11 = 7,
S12 = 12,
S13 = 17,
S14 = 22;
var S21 = 5,
S22 = 9,
S23 = 14,
S24 = 20;
var S31 = 4,
S32 = 11,
S33 = 16,
S34 = 23;
var S41 = 6,
S42 = 10,
S43 = 15,
S44 = 21;
// Steps 1 and 2. Append padding bits and length and convert to words
x = ConvertToWordArray(sMessage);
// Step 3. Initialise
a = 0x67452301;
b = 0xEFCDAB89;
c = 0x98BADCFE;
d = 0x10325476;
// Step 4. Process the message in 16-word blocks
for (k = 0; k < x.length; k += 16) {
AA = a;
BB = b;
CC = c;
DD = d;
a = FF(a, b, c, d, x[k + 0], S11, 0xD76AA478);
d = FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756);
c = FF(c, d, a, b, x[k + 2], S13, 0x242070DB);
b = FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE);
a = FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF);
d = FF(d, a, b, c, x[k + 5], S12, 0x4787C62A);
c = FF(c, d, a, b, x[k + 6], S13, 0xA8304613);
b = FF(b, c, d, a, x[k + 7], S14, 0xFD469501);
a = FF(a, b, c, d, x[k + 8], S11, 0x698098D8);
d = FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF);
c = FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1);
b = FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE);
a = FF(a, b, c, d, x[k + 12], S11, 0x6B901122);
d = FF(d, a, b, c, x[k + 13], S12, 0xFD987193);
c = FF(c, d, a, b, x[k + 14], S13, 0xA679438E);
b = FF(b, c, d, a, x[k + 15], S14, 0x49B40821);
a = GG(a, b, c, d, x[k + 1], S21, 0xF61E2562);
d = GG(d, a, b, c, x[k + 6], S22, 0xC040B340);
c = GG(c, d, a, b, x[k + 11], S23, 0x265E5A51);
b = GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA);
a = GG(a, b, c, d, x[k + 5], S21, 0xD62F105D);
d = GG(d, a, b, c, x[k + 10], S22, 0x2441453);
c = GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681);
b = GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8);
a = GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6);
d = GG(d, a, b, c, x[k + 14], S22, 0xC33707D6);
c = GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87);
b = GG(b, c, d, a, x[k + 8], S24, 0x455A14ED);
a = GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905);
d = GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8);
c = GG(c, d, a, b, x[k + 7], S23, 0x676F02D9);
b = GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A);
a = HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942);
d = HH(d, a, b, c, x[k + 8], S32, 0x8771F681);
c = HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122);
b = HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C);
a = HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44);
d = HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9);
c = HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60);
b = HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70);
a = HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6);
d = HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA);
c = HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085);
b = HH(b, c, d, a, x[k + 6], S34, 0x4881D05);
a = HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039);
d = HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5);
c = HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8);
b = HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665);
a = II(a, b, c, d, x[k + 0], S41, 0xF4292244);
d = II(d, a, b, c, x[k + 7], S42, 0x432AFF97);
c = II(c, d, a, b, x[k + 14], S43, 0xAB9423A7);
b = II(b, c, d, a, x[k + 5], S44, 0xFC93A039);
a = II(a, b, c, d, x[k + 12], S41, 0x655B59C3);
d = II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92);
c = II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D);
b = II(b, c, d, a, x[k + 1], S44, 0x85845DD1);
a = II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F);
d = II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0);
c = II(c, d, a, b, x[k + 6], S43, 0xA3014314);
b = II(b, c, d, a, x[k + 13], S44, 0x4E0811A1);
a = II(a, b, c, d, x[k + 4], S41, 0xF7537E82);
d = II(d, a, b, c, x[k + 11], S42, 0xBD3AF235);
c = II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB);
b = II(b, c, d, a, x[k + 9], S44, 0xEB86D391);
a = AddUnsigned(a, AA);
b = AddUnsigned(b, BB);
c = AddUnsigned(c, CC);
d = AddUnsigned(d, DD);
}
if (bit == 32) {
return WordToHex(a) + WordToHex(b) + WordToHex(c) + WordToHex(d);
} else {
return WordToHex(b) + WordToHex(c);
}
}
\ No newline at end of file
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册