这是我的解密函数:
def decrypt(value):
key = b'1111111111111111'
cipher = AES.new(key, AES.MODE_ECB)
msg = cipher.decrypt(base64.b64decode(value))
return msg
我想我遗漏了一些东西,因为当我给它一个字符串来解密时,它也会添加一些奇怪的字符:
示例:hey\r\r\r\r\r\r\r\r\r\r\r\r
我做错了什么?
P. S.我使用谷歌应用程序引擎和这个库从Crypto.密码导入AES
编辑:
private static final String ALGO = "AES";
private static final byte[] keyValue = new byte[] { '1', '1', '1', '1', '1', '1', '1', '1', '1','1', '1', '1','1','1','1','1' };
public static String encrypt(String Data) throws Exception {
Key key = generateKey();
Cipher c = Cipher.getInstance(ALGO);
c.init(Cipher.ENCRYPT_MODE, key);
byte[] encVal = c.doFinal(Data.getBytes());
// String encryptedValue = new BASE64Encoder().encode(encVal);
byte[] decoded = Base64.encodeBase64(encVal);
return (new String(decoded, "UTF-8") + "\n");
}
private static Key generateKey() throws Exception {
Key key = new SecretKeySpec(keyValue, ALGO);
return key;
}
由于Java默认为“PKCS#5Padding”
,因此可以很安全地假设您必须处理这些填充字节(一到块大小-在本例中为16-字节总是被填充)。Java“PKCS#5Padding”
填充模式实际上是PKCS#7填充,因为PKCS#5只指定8字节块的填充(例如DES模式加密)。
所以这意味着你必须寻找PKCS#5填充或PKCS#7填充。快速搜索将显示此答案。
我的错是我没有找到足够的答案
这里有一个链接,答案是:加密
还是谢了
就这么做怎么样
return msg.strip()
这将摆脱所有\r的
问题内容: 我们正在使用bcrypt来存储不需要解密的密码和数据。 应该采取什么措施来保护其他这样做的用户信息。对于此示例,假设我们不希望用户的真实姓名采用纯文本格式,以防有人获取数据库。 这是一些敏感数据,但还需要不时调用并以纯文本显示。有没有简单的方法可以做到这一点? 问题答案: 您可以使用crypto模块: 编辑 现在 createCipher 和 createDecipher 已被弃用,而
问题 你想去掉文本字符串开头,结尾或者中间不想要的字符,比如空白。 解决方案 strip() 方法能用于删除开始或结尾的字符。 lstrip() 和 rstrip() 分别从左和从右执行删除操作。 默认情况下,这些方法会去除空白字符,但是你也可以指定其他字符。比如: >>> # Whitespace stripping >>> s = ' hello world \n' >>> s.strip()
加密方法 JavaScript
问题内容: 我在PHP中有一个函数,可按如下所示加密文本: 如何在Python中解密这些值? 问题答案: 要解密这种加密形式,您将需要获得Rijndael版本。在这里可以找到一个。然后,您将需要模拟PHP Mcrypt模块中使用的键和文本填充。它们增加了填充文本和键的正确大小。他们使用的是256位块大小,并且您提供的密钥使用的密钥大小为128(如果您提供更大的密钥,则密钥大小可能会增加)。不幸的是
问题内容: 我正在尝试解密从后端服务器收到的字符串,该后端服务器使用OpenSSL使用AES-256-CBC对字符串进行加密。有代码块: 不幸的是,当我到达 声明抛出以下异常: 有任何想法吗? 问题答案: 您应该在方法开始时对字符串进行 解码 ,而不是对字符串的平台特定表示进行编码。 或更确切地说: 如果您正确命名变量。 通常,每次(感觉像您必须使用)方法或构造函数时,您可能都会做错事情。你应该先
被删除,因此也是另一个匹配字符串的一部分,不确定这是由于错误的regEx还是反字符类的错误应用。