javascript - 无法解码从 python 加密的加密字符串
问题描述
这是我在python中加密和解密的代码。
def encrypt(self, raw, key):
raw = self._pad(raw)
iv = Random.new().read(AES.block_size)
cipher = AES.new(key, AES.MODE_CBC, iv)
return base64.b64encode(iv + cipher.encrypt(raw))
def decrypt(self, enc, key):
enc = base64.b64decode(enc)
iv = enc[:AES.block_size]
cipher = AES.new(key, AES.MODE_CBC, iv)
return self._unpad(cipher.decrypt(enc[AES.block_size:])).decode('utf-8')
def _pad(self, s):
return s + (self.bs - len(s) % self.bs) * chr(self.bs - len(s) % self.bs)
@staticmethod
def _unpad(s):
return s[:-ord(s[len(s)-1:])]
我想用打字稿在 Angular 7 中实现相同的加密/解密。我总是得到一个空字符串。这是我在打字稿中加密和解密的代码。
import {Component, OnInit} from '@angular/core';
import {EncryptionService} from './shared';
import * as CryptoJS from 'crypto-js';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
constructor(private encryptionService: EncryptionService) {
}
title = 'reactiveForm';
ngOnInit() {
const decryptedValue = '8Tp7dEA2MfjL0Q4SF51fLS6oivJtsURyvGQ3q5P9WujZHzfIKZTcRJrfpeQ42T34afV+AkWaTUnmrLxo0jjgHMpS/HVX7KSOUg6G/jNht8Y=';
const secretKey = 'd8xYs6TtzrkhYcpgvHCNO0DvLu5LFBAA';
const decrypted = this.decrypt(secretKey, decryptedValue);
console.log('Decrypted :' + decrypted);
}
decrypt(keys, value) {
const key = CryptoJS.enc.Utf8.parse(keys);
const iv = CryptoJS.enc.Utf8.parse(keys);
const decrypted = CryptoJS.AES.decrypt(this.decodeBase64(value), key, {
keySize: 128 / 8,
iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return decrypted.toString(CryptoJS.enc.Utf8);
};
encrypt(keys, value) {
const key = CryptoJS.enc.Utf8.parse(keys);
const iv = CryptoJS.enc.Utf8.parse(keys);
const encrypted = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(value.toString()), key,
{
keySize: 128 / 8,
iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString();
};
decodeBase64(data) {
return CryptoJS.enc.Base64.parse(data);
}
}
我在 app-component 中编写了加密/解密只是为了测试它工作正常。
解决方案
推荐阅读
- java - 如何将属性占位符传递给 YAML 配置文件中的注释?
- powershell - New-WebServiceProxy 与自动生成类的枚举
- python-3.x - 在熊猫数据框的数字列中插入逗号
- django - 当我运行 python manage.py migrate 得到 ValueError: String input unrecognized as WKT EWKT, and HEXEWKB
- swift - Swift Regex 在括号之间捕获文件名?
- r - 在循环中使用gather(),“key”和“value”作为变量
- scala - 为什么我尝试在 Spark 中构建回归模型时执行用户定义的函数错误?
- javascript - 用于绑定 document.createElement 参考的 VSCode Intellisense
- reactjs - 我的 React 站点只显示主页,在实时服务器上上传后找不到所有其他页面
- javascript - 我在构建 js 函数并在 HTML 中连接它时做错了什么?