【发布时间】:2017-12-01 02:56:52
【问题描述】:
以下代码
(defn caesar-block-cypher
"Computes the caesar block cypher for the given text with the k key. Returns an array of bytes"
[k text]
(let [byte-string (.getBytes text)]
(loop [return-byte-array [] byte-string byte-string]
(if (= '() byte-string)
return-byte-array
(recur
(conj return-byte-array (byte (+ k (first byte-string))))
(rest byte-string))))))
在文本中使用密钥 k 处理凯撒密码后返回一个字节数组。我想将字节数组转换回字符串或直接对字符串执行密码,但(new String return-byte-array) 不起作用。有什么建议吗?
编辑:感谢您的回复。我用更实用的风格(实际上有效)重新编码:
(defn caesar-block-cypher
"Computes the caesar block cypher for the given text with the k key."
[k text & more]
(let [byte-string (.getBytes (apply str text (map str more)))]
(apply str (map #(char (mod (+ (int %) k) 0x100)) byte-string))))
【问题讨论】:
-
您返回的不是字节数组而是字符串。 (String.b) 将 byte.array 转换为 String。
-
是的,我一开始就是这么打算的。
标签: string clojure encryption