PersistenceException:ERROR:用于编码“ UTF8”的无效字节序列

时间:2018-07-21 07:04:42

标签: java encryption password-encryption

我正在使用 PostgreSQL ,并且在从Java代码执行更新语句期间遇到错误。

print(df.groupby(df.time.dt.minute)['Numbers'].mean())

#time
#30.0    24736.000000
#32.0      959.666667

密码输入的代码段为:

ERROR: invalid byte sequence for encoding "UTF8": 0x00

加密功能如下:

StringBuilder encryptionKey = new StringBuilder().append(newPassword).append(userEmail).append(userEmail).append(userEmail);
AdvancedEncryptionStandard aes = new AdvancedEncryptionStandard(encryptionKey.toString().getBytes(StandardCharsets.UTF_8));
newEncryptedPwd =  new String(aes.encrypt(newPassword.getBytes(StandardCharsets.UTF_8)));
EntityManager em = EntityManagerUtil.getEntityManager(schemaName);
EntityManagerUtil.beginTransaction(schemaName);
Query query = em.createQuery("UPDATE User um SET um.password=:newPassword WHERE um.loginId=:userID");
query.setParameter("userID", userName);
query.setParameter("newPassword", newEncryptedPwd);
query.executeUpdate();

我已经通过public byte[] encrypt(byte[] plainText) throws Exception { SecretKeySpec secretKey = new SecretKeySpec(key,0,16,'AES'); Cipher cipher = Cipher.getInstance(ALGORITHM); cipher.init(Cipher.ENCRYPT_MODE, secretKey); return cipher.doFinal(plainText); } public AdvancedEncryptionStandard(byte[] key) { this.key = key; } 命令检查了client_encoding,它显示的是UTF-8。

有人可以帮我解决这个问题吗?我浏览了其他主题中提供的建议,但没有帮助。

1 个答案:

答案 0 :(得分:0)

0实际上是无效的UTF8。 UTF8包含æ,它包含™,但其中没有一个包含代码点0。

您的问题是您试图存储任意二进制数据,就像它们是UTF8编码的文本一样。别。如果您对某些内容进行加密,则加密将隐藏其本质(用于加密的是作业描述),因此它是整数,您将无法再将其存储在integer列中,如果是文本,您将无法再将其存储在text列中。您只有an array of bytes